目錄
- 一、AdminSite 類
- 1.1 admin_view() 方法
- 1.2 check_dependencies() 方法
- 1.3 copy_registry() 方法
- 1.4 create_admin_view() 方法
- 1.5 create_mode_admin_view() 方法
- 1.6 get_plugins() 方法
- 1.7 get_view_class() 方法
- 1.8 has_permission() 方法
- 1.9 register() 方法
- 1.10 register_modelview() 方法
- 1.11 register_plugin() 方法
- 1.12 register_view() 方法
- 1.13 restore_registry() 方法
- 1.14 unregister() 方法
- 1.15 urls() 方法
- 二、AlreadyRegistered 異常
- 三、MergeAdminMetaclass 類
- 四、NotRegistered 異常
一、AdminSite 類
class xadmin.sites.AdminSite(name='xadmin')
Xadmin 的核心類, 管理所有在 Xadmin 註冊的內容。
通常情況下, 一個管理後臺只有一個 AdminSite 的實例, 這個 AdminSite 實例負責如下的幾個任務:
- 註冊管理所有 Xadmin 需要的信息;
- 創建
admin view class
- 在 Django 中註冊 urls
Xadmin 需要的信息包括:
- 需要通過 Xadmin 管理的 models, 以及各 model 的 admin 設置信息
- 註冊
admin view class
- 註冊
model admin view class
- 註冊的所有插件
1.1 admin_view() 方法
admin_view(view, cacheable=False)
在當前的 AdminSite 中爲所有的 View 提供 Decorator。 使用 AdminSite 中的 has_permission
方法來檢查當前登錄用戶是否具有進入 AdminSite 的權限, 當沒有相應權限時將被重定向到登錄頁面。
該方法將在 AdminSite 的 get_urls
方法中被調用。
參數:
- cacheable: 默認情況下, 所有的 AdminView 會通過
never_cache
標記成不做緩存, 如果確實需要緩存, 可以設置 cacheable=True
1.2 check_dependencies() 方法
check_dependencies()
檢查 Xadmin 依賴的包是否被正確的安裝。
默認情況下, 會檢查 ContentType
模塊是否被正確安裝。
1.3 copy_registry() 方法
copy_registry()
拷貝當前 AdminSite 實例的信息。
1.4 create_admin_view() 方法
create_admin_view(admin_view_class)
使用 AdminSite 的 get_view_class
方法創建 AdminView 類, 並且返回一個能夠被 get_urls
調用的視圖方法。
參數:
- admin_view_class: AdminView 類
1.5 create_mode_admin_view() 方法
create_mode_admin_view(admin_view_class, model, option_class)
使用 AdminSite 的 get_view_class
方法創建 ModelAdminView
, 並且返回能夠被 get_urls
方法調用的視圖方法。
參數:
- admin_view_class: AdminSite 類, 該類應該爲
ModelAdminView
的子類 - model: Model 類, 目前該參數暫無作用
- option_class: Model 的 OptionClass, 保存對該 Model 的相關定製
1.6 get_plugins() 方法
get_plugins(admin_view_class, *option_class)
Xadmin 的核心方法, 用來從 AdminViewClass 處獲取插件。
獲取插件實例, 首先根據 AdminView 類及其所有集成類在已經註冊的插件中查找相應的插件類, 然後再使用第二個參數 OptionClass 拼成插件類。
1.7 get_view_class() 方法
get_view_class(view_class, option_class=None, **opts)
Xadmin 最核心的方法, 用來創建歸屬於 Xadmin 的特有的 AdminViewClass 類。
創建 AdminView 類的實例和動態生成 mix 來分兩步:
- 使用已經註冊的 OptionClass(詳見 register 方法)、
option_class
參數和view_class
參數去動態創建類的實例 - 依據
view_class
和它的父類來檢索相應的插件, 並將其作爲 AdminViewClass 的plugins
屬性進行創建
1.8 has_permission() 方法
has_permission(request)
如果返回 True, 則說明 request.user 至少能夠進入當前 Xadmin 網站, 否則將訪問不了任何頁面。
1.9 register() 方法
register(model_or_iteable, admin_class=<type 'object'>, **options)
註冊需要被管理的 Model, 或者註冊 AdminView 的 OptionClass。
參數:
- model_or_iterable: 傳入 model 或是指定的 ModelOptionClass
- admin_class: 當 model_or_iterable 爲 Model 時, 該參數爲 ModelAdmin; model_of_iterable 爲 AdminView 時, 該參數爲 OptionClass
請通過 xadmin.views.base.BaseAdminPlugin
來查看 Admin Plugin 的詳細內容。 舉個例子:
from models import SomeModel
class SomeModelAdmin(object):
pass
site.register(SomeModel, SomeModelAdmin)
1.10 register_modelview() 方法
register_modelview(path, admin_view_class, name)
向 AdminSite 註冊 Model Base Admin View
類。
參數:
- path: view 對應的 url 路徑
- admin_view_class: 註冊的
Model Base Admin View
類 - name: view 對應的 url name, 要包含兩個 %%s, 分別會替換爲 app_label 和 module_name
在 AdminSite 中註冊的 Model Base Admin View
可以用來爲已經註冊的 Model 創建 AdminView, 並且包含相關的 Model 信息。 詳情請查看 xadmin.views.base.ModelAdminView
。 舉個例子:
from xadmin.views import ModelAdminView
class TestModelAdminView(ModelAdminView):
def get(self, request, obj_id):
pass
site.register_modelview(r'^(.+)/test/$', TestModelAdminView, name='%s_%s_test')
註冊完成後, 視圖方法可以通過 ‘/%(app_label)s/%(module_name)s/123/test’ 進行訪問。
1.11 register_plugin() 方法
register_plugin(plugin_class, admin_view_class)
在 AdminSite 的實例中註冊插件類, 當 AdminView 類的任何實例運行時, 綁定在當前視圖類的相關插件類實例都會生效。
參數:
- plugin_class: view 對應的 url 路徑
- admin_view_class: 該 plugin 綁定的 AdminView 類
關於 Admin Plugin 的詳情請查看 xadmin.views.base.BaseAdminPlugin
。 舉個例子:
from xadmin.views import BaseAdminPlugin
class TestAdminPlugin(BaseAdminPlugin):
def get_context(self, context):
context['test'] = True
return context
site.register_plugin(TestAdminPlugin, SomeAdminView)
註冊完成後, 只要運行 SomeAdminView 的 get_context
方法就會調用該插件。
1.12 register_view() 方法
register_view(path, admin_view_class, name)
通過在 AdminSite 中註冊 AdminView 類, 可以創建一個獨立的 admin 頁面, 比如登錄頁面、 介紹頁面、 幫助頁面等。
參數:
- path: view 對應的 url 路徑
- admin_view_class: 註冊的 AdminView 類
- name: view 對應的 url name
關於 AdminView 的詳情請參考 xadmin.views.base.BaseAdminView
。 舉個例子:
from xadmin.views import BaseAdminView
class TestAdminView(BaseAdminView):
def get(self, request):
pass
site.register_view(r'test_view/$', TestModelAdminView, name='for_test')
註冊完成後, 用戶可以通過 ‘/test_view/’ 來訪問該視圖方法。
1.13 restore_registry() 方法
restore_registry(data)
恢復當前 AdminSite 實例的信息。
1.14 unregister() 方法
unregister(model_or_iterable)
取消 Model 或 OptionClass 的註冊。
如果 Model 或 OptionClass 從來沒有被註冊過, 它將拋出 xadmin.sites.NotRegistered
異常。
1.15 urls() 方法
urls(self)
返回 Xadmin 站點用來設定 Django urls 的 urls 屬性。 它是能夠在 Django framework 的 ‘urls.py’ 文件中找到的一個獲取屬性的方法, 下面展示的是一個例子:
from django.conf.urls import patterns, include, url
import xadmin
xadmin.autodiscover()
urlpatterns = patterns('',
url(r'', include(xadmin.site.urls)),
)
二、AlreadyRegistered 異常
xadmin.sites.AlreadyRegistered
如果一個模塊已經被註冊到 AdminSite 中, 當再次註冊該模塊時將報出該異常。
三、MergeAdminMetaclass 類
class xadmin.sites.MergeAdminMetaclass
用來生成 admin view class
的原類。
目前該原類沒有被指定用途, 但是下一個版本將爲 admin view class
增加一些公共屬性。
四、NotRegistered 異常
xadmin.sites.NotRegistered
如果一個模塊從來沒有註冊到 AdminSite 中, 當嘗試取消該模塊的註冊時將會報出該異常。