Django Xadmin 官方文档 之六 后台管理

欢迎大家扫码关注我的微信公众号:
数据之恋

一、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 来分两步:

  1. 使用已经注册的 OptionClass(详见 register 方法)、 option_class参数和 view_class参数去动态创建类的实例
  2. 依据 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 中, 当尝试取消该模块的注册时将会报出该异常。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值