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_cache decorator. If the view can be safely cached, set 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 方法中

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 的相关定制
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=<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

restore_registry(data)[source]

恢复当前 AdminSite 实例的信息

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)),
)
exception xadmin.sites.AlreadyRegistered[source]

如果一个 model 已经在 AdminSite 注册过,当尝试再次注册时会抛出这个异常。

exception xadmin.sites.ImproperlyConfigured[source]

Django is somehow improperly configured

class xadmin.sites.MergeAdminMetaclass[source]

用来生成 admin view class 的原类。

目前该原类没有做什么特殊的工作。接下来的版本该原类可能会给 admin view class 注入一些公共的属性。

class xadmin.sites.ModelBase[source]

Metaclass for all models.

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)