AdminSite¶
-
class
xadmin.sites.AdminSite(name='xadmin')[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()方法中使用该方法urls = super(MyAdminSite, self).get_urls() urls += [
url(r’^my_view/$’, self.admin_view(some_view))] return urls
By default, admin_views are marked non-cacheable using the
never_cachedecorator. If the view can be safely cached, set cacheable=True.
-
create_admin_view(admin_view_class)[source]¶ 使用
get_view_class()创建 AdminView 类,并且返回 view 方法,可以用于 get_urls 方法中Parameters: admin_view_class – AdminView 类
-
create_model_admin_view(admin_view_class, model, option_class)[source]¶ 使用
get_view_class()创建 ModelAdminView 类,并且返回 view 方法,可以用于 get_urls 方法中Parameters: - admin_view_class – AdminView 类,该类应该为
ModelAdminView的子类 - model – Model 类,目前该参数暂无作用
- option_class – Model 的 OptionClass,保存对该 Model 的相关定制
- admin_view_class – AdminView 类,该类应该为
-
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 属性
- 使用已经注册的 OptionClass (见
-
register(model_or_iterable, admin_class=<class 'object'>, **options)[source]¶ 注册需要管理的 Model, 或是注册某 AdminView 的 OptionClass
Parameters: - model_or_iterable – 传入 model 或是指定的 ModelOptionClass
- admin_class – 当 model_or_iterable 为 Model 时,该参数为 ModelAdmin;model_or_iterable 为 AdminView 时 ,该参数为 OptionClass
关于 Admin Plugin 具体内容可以参看
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,
Parameters: - 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 信息。 具体内容可以参看
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 会生效。
Parameters: - plugin_class – view对应的url路径
- admin_view_class – 该 plugin 绑定的 Admin View 类
关于 Admin Plugin 具体内容可以参看
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 页面,例如登陆,介绍页面,帮助页面等。
Parameters: - path – view对应的url路径
- admin_view_class – 注册的 Admin View 类
- name – view对应的url name
关于 Admin View 具体内容可以参看
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
-
unregister(model_or_iterable)[source]¶ 取消 Model 或 OptionClass 的注册
如果 Model 或 OptionClass 并未注册过,会抛出
xadmin.sites.NotRegistered异常
-
urls¶ 返回 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)), )
-
class
xadmin.sites.MergeAdminMetaclass[source]¶ 用来生成 admin view class 的原类。
目前该原类没有做什么特殊的工作。接下来的版本该原类可能会给 admin view class 注入一些公共的属性。
-
exception
xadmin.sites.NotRegistered[source]¶ 当一个model并未在
AdminSite注册,当调用AdminSite.unregister()想要取消该model的注册就会抛出该异常。
-
xadmin.sites.iteritems(obj, **kwargs)[source]¶ Use this only if compatibility with Python versions before 2.7 is required. Otherwise, prefer viewitems().
-
xadmin.sites.never_cache(view_func)[source]¶ Decorator that adds headers to a response so that it will never be cached.
-
xadmin.sites.update_wrapper(wrapper, wrapped, assigned=('__module__', '__name__', '__qualname__', '__doc__', '__annotations__'), updated=('__dict__', ))[source]¶ Update a wrapper function to look like the wrapped function
wrapper is the function to be updated wrapped is the original function assigned is a tuple naming the attributes assigned directly from the wrapped function to the wrapper function (defaults to functools.WRAPPER_ASSIGNMENTS) updated is a tuple naming the attributes of the wrapper that are updated with the corresponding attribute from the wrapped function (defaults to functools.WRAPPER_UPDATES)