Python之路(三十七):xadmin快速搭建后台(下)
插件规范
文档模板:
""" Name ====== 作者 ---- 该插件的作者信息 功能 ---- 描述插件的主要功能 截图 ---- .. image:: /images/plugins/action.png 使用 ---- 描述插件的使用方法, 以及使用示例. 版本 ---- 描述插件的版本信息 API --- .. autoclass:: XXX """
AdminSite
class xadmin.sites.AdminSite(name='admin', app_name='admin')[source]
xadmin最核心的类,管理整个xadmin站点的所有注册内容。
一般一个管理站点只有一个 AdminSite 实例,该实例主要完成以下工作:
-
注册管理所有 xadmin 需要的信息
-
创建 admin view class
-
注册 django urls
其中,xadmin 需要的信息包括以下信息:
-
需要 xadmin 管理的 models,以及各 model 的 admin 信息
-
注册的 admin view class
-
注册的 model admin view class
-
注册的各种插件
admin_view(view, cacheable=False)[source]
为当前 AdminSite 的所有 View 提供的 Decorator。主要是功能是使用AdminSite.has_permission() 方法来判断当前用户是否有权限访问该 ``AdminSite``, 如果没有,转到登陆页面
通常情况下会在 AdminSite.get_urls() 方法中使用该方法
参数: |
cacheable – 默认情况下,所有的 AdminView 会通过 never_cache 标记成不做缓存,如果确实需要缓存,可以设置 cacheable=True |
check_dependencies()[source]
检查运行xadmin需要的包是否已经正确安装
默认情况下会检查 ContentType 模块是否已经正确安装
copy_registry()[source]
复制当前 AdminSite 实例的信息
create_admin_view(admin_view_class)[source]
使用 get_view_class() 创建 AdminView 类,并且返回 view 方法,可以用于 get_urls 方法中
参数: |
admin_view_class – AdminView 类 |
create_model_admin_view(admin_view_class, model, option_class)[source]
使用 get_view_class() 创建 ModelAdminView 类,并且返回 view 方法,可以用于 get_urls 方法中
参数: |
admin_view_class – AdminView 类,该类应该为 ModelAdminView 的子类 model – Model 类,目前该参数暂无作用 option_class – Model 的 OptionClass,保存对该 Model 的相关定制 |
get_plugins(admin_view_class, *option_classes)[source]
xadmin中 核心 方法,用于获取 AdminViewClass 的 plugins。
获取 plugins 首先根据该 AdminViewClass 及其所有的集成类在已经注册的插件中找到相应的插件类。然后再使用第二个参数的 OptionClass 拼成插件类。
get_view_class(view_class, option_class=None, **opts)[source]
xadmin中 最核心 的方法,用于创建 xadmin 特有的 AdminViewClass。
创建 AdminView 和核心思想为动态生成 mix 的类,主要步骤有两步:
-
使用已经注册的 OptionClass (见 register()) 以及参数传入的 option_class 与 view_class 动态生成类
-
根据 view_class 及其继承类找到相应的 plugins, 作为生成的 AdminViewClass 的 plugins 属性
has_permission(request)[source]
如果返回为 True 则说明 request.user 至少能够访问当前xadmin网站。否则无法访问xadmin的任何页面。
register(model_or_iterable, admin_class=<type 'object'>, **options)[source]
注册需要管理的 Model, 或是注册某 AdminView 的 OptionClass
参数: |
model_or_iterable – 传入 model 或是指定的 ModelOptionClass admin_class – 当 model_or_iterable 为 Model 时,该参数为 ModelAdmin;model_or_iterable 为 AdminView 时 ,该参数为 OptionClass |
关于 Admin Plugin 具体内容可以参看 :class:`~xadmin.views.base.BaseAdminPlugin`。 举例:
from models import SomeModel class SomeModelAdmin(object): pass site.register(SomeModel, SomeModelAdmin)
register_modelview(path, admin_view_class, name)[source]
将 Model Base Admin View 类注册到 AdminSite,
参数: |
path – view对应的url路径 admin_view_class – 注册的 Model Base Admin View 类 name – view对应的url name, 要包含两个%%s, 分别会替换为 app_label和module_name |
注册 Model Base Admin View 可以为每一个在xadmin注册的 Model 生成一个 Admin View,并且包含相关的 Model 信息。具体内容可以参看 :class:`~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 访问到该view
register_plugin(plugin_class, admin_view_class)[source]
将 Plugin 类注册到 AdminSite,当任何 Admin View 运行时当前 view 绑定的 plugin 会生效。
参数: |
plugin_class – view对应的url路径 admin_view_class – 该 plugin 绑定的 Admin View 类 |
关于 Admin Plugin 具体内容可以参看 :class:`~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 方法,就会调用该 plugin。
register_view(path, admin_view_class, name)[source]
将 Admin View 类注册到 AdminSite,一般用于创建独立的 admin 页面,例如登陆,介绍页面,帮助页面等。
参数: |
path – view对应的url路径 admin_view_class – 注册的 Admin View 类 name – view对应的url name |
关于 Admin View 具体内容可以参看 :class:`~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/ 访问到该view
restore_registry(data)[source]
恢复当前 AdminSite 实例的信息
unregister(model_or_iterable)[source]
取消 Model 或 OptionClass 的注册
如果 Model 或 OptionClass 并未注册过,会抛出 xadmin.sites.NotRegistered 异常
urls[source]
返回 xadmin site 的urls,用于设置django的urls。该方法用于属性使用。在您的Django的 urls.py 中,使用示例如下:
from django.conf.urls import patterns, include, url import xadmin xadmin.autodiscover() urlpatterns = patterns('', url(r'', include(xadmin.site.urls)), )
exception xadmin.sites.AlreadyRegistered[source]
如果一个 model 已经在 AdminSite 注册过,当尝试再次注册时会抛出这个异常。
class xadmin.sites.MergeAdminMetaclass[source]
用来生成 admin view class 的原类。
目前该原类没有做什么特殊的工作。接下来的版本该原类可能会给 admin view class 注入一些公共的属性。
exception xadmin.sites.NotRegistered[source]
当一个model并未在 AdminSite 注册,当调用 AdminSite.unregister() 想要取消该model的注册就会抛出该异常。