欢迎大家扫码关注我的微信公众号:
目录
- 一、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 中, 当尝试取消该模块的注册时将会报出该异常。