Django Xadmin 官方文檔 之六 後臺管理

一、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 來分兩步:

  1. 使用已經註冊的 OptionClass(詳見 register 方法)、 option_class參數和 view_class參數去動態創建類的實例
  2. 依據 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 中, 當嘗試取消該模塊的註冊時將會報出該異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章