目的
- adminサイトから部品化の方法を学ぶ
index
1. app.urls.py
2. django.contrib.admin.site.py
3. urlsプロパティ
app.urls.py
url(r'^admin/', include(admin.site.urls)),
- アプリケーションのurlに記載するadminサイトのurlパターン
- django.contrib.adminをインポート
django.contrib.admin.sites.py
452行目
# This global object represents the default admin site, for the common case. # You can instantiate AdminSite in your own code to create a custom admin site. # このグローバルオブジェクトは、一般的な場合のデフォルトのadminサイトを表します。 # カスタム管理サイトを作成するために、独自のコードでAdminSiteをインスタンス化することができます。 site = AdminSite()
- siteはAdminSiteクラスのインスタンス
- AdminSiteクラス定義は、29~448行目
urlsプロパティ
252行目
@property def urls(self): return self.get_urls(), self.app_name, self.name
- get_urls()とapp_Name, nameの組(タプル)を返却
- urlの基本は、patternsのタプル - patterns('', url(), url())
207行目
def get_urls(self): from django.conf.urls import patterns, url, include if settings.DEBUG: self.check_dependencies() def wrap(view, cacheable=False): def wrapper(*args, **kwargs): return self.admin_view(view, cacheable)(*args, **kwargs) return update_wrapper(wrapper, view) # Admin-site-wide views. urlpatterns = patterns('', url(r'^$', wrap(self.index), name='index'), url(r'^logout/$', wrap(self.logout), name='logout'), url(r'^password_change/$', wrap(self.password_change, cacheable=True), name='password_change'), url(r'^password_change/done/$', wrap(self.password_change_done, cacheable=True), name='password_change_done'), url(r'^jsi18n/$', wrap(self.i18n_javascript, cacheable=True), name='jsi18n'), url(r'^r/(?P<content_type_id>\d+)/(?P<object_id>.+)/$', wrap(contenttype_views.shortcut), name='view_on_site'), url(r'^(?P<app_label>\w+)/$', wrap(self.app_index), name='app_list') ) # Add in each model's views. for model, model_admin in six.iteritems(self._registry): urlpatterns += patterns('', url(r'^%s/%s/' % (model._meta.app_label, model._meta.model_name), include(model_admin.urls)) ) return urlpatterns
- wrapで処理した認証系ビューをパターンに登録
- six.iteritems(self._registry)の個数だけ、ループしてurlpatternに追記する
- wrapとは何か
- update_wrapperメソッドを返却するメソッド。