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 的类,主要步骤有两步:

  1. 使用已经注册的 OptionClass (见 register()) 以及参数传入的 option_class 与 view_class 动态生成类

  2. 根据 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的注册就会抛出该异常。

posted @ 2018-11-16 12:55  __Miracle  阅读(465)  评论(0编辑  收藏  举报