xadmin帮助文档文档格式.docx
- 文档编号:22740254
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:13
- 大小:22.47KB
xadmin帮助文档文档格式.docx
《xadmin帮助文档文档格式.docx》由会员分享,可在线阅读,更多相关《xadmin帮助文档文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
importxadmin
xadmin.autodiscover()
#version模块自动注册需要版本控制的Model
fromxadmin.pluginsimportxversion
urlpatterns=patterns('
url(r'
^admin/'
include(xadmin.site.urls)),
打开浏览器,输入
http:
//127.0.0.1:
8000
看一下效果吧。
2、Xadmin功能特征
1、基于Bootstrap3
Xadmin使用Bootstrap3.0框架精心打造。
基于Bootstrap3,Xadmin天生就支持在多种屏幕上无缝浏览,并完全支持Bootstrap主题模板,让您的管理后台也动感、多样起来。
2、内置功能丰富
Xadmin作为一款全面的后台管理系统框架,不仅提供了基本的CRUD功能,还内置了丰富的插件功能。
包括数据导出、书签、图表、数据添加向导及图片相册等多种扩展功能。
3、强大的插件系统
Xadmin的插件系统借鉴了其他领域成功框架的设计思想,让插件可以扩展系统的任何一个功能点。
对于开发者,Xadmin的插件开发简单;
对于使用者,Xadmin的插件安装方便。
4、强大的过滤器功能
数据筛选是Xadmin的强项。
通过Xadmin的过滤器,您可以使用模糊查找,数字范围查找,日期范围查找等多种高级查找方式。
并且可以将您的查询结果存为书签方便今后使用。
5、完善的系统权限
Xadmin安全系统,控制粒度可以精细到每行数据,甚至每个字段,结合角色及用户组,几乎可以胜任任何变态的权限系统要求。
Xadmin插件制作
插件原理
Xadmin的插件系统架构设计一定程度上借鉴了wordpress的设计。
想要了解Xadmin的插件系统架构首先需要了解Xadmin
AdminView的概念。
简单来说,就是Xadmin系统中每一个页面都是一个AdminView对象返回的HttpResponse结果。
xadmin的插件系统做的事情其实就是在AdminView运行过程中改变其执行的逻辑,或是改变其返回的结果,起到修改或增强原有功能的效果。
下面让我们看看整个插件从制作完成到实际运行的整个过程。
首先需要创建自己的插件类,插件类继承
BaseAdminPlugin
classHelloWorldPlugin(BaseAdminPlugin):
...
开发好的插件首先要注册到Xadmin中,示例代码如下:
#ListAdminView是Model列表页面
xadmin.site.register_plugin(HelloWorldPlugin,ListAdminView)
其中插件的注册和使用可以参看
xadmin.sites.AdminSite.register_plugin()
当将插件注册到Xadmin后,Xadmin在创建AdminView实例的时候会将该插件放入实例的plugins属性。
当AdminView在处理请求时,会首先逐个调用plugins中插件的init_request()方法,插件在该方法中一般进行初始化的操作并且返回一个Boolean值告诉AdminView是否需要加载该插件。
当init_request()方法返回值为False时,AdminView不会加载该插件。
实例如下:
say_hello=False#初始化方法根据say_hello属性值返回definit_request(self,*args,**kwargs):
returnbool(self.say_hello)
在以上实例中,插件根据自身的say_hello属性来决定是否让自己被加载。
您可能会迷惑,say_hello属性看起来一直会是False呀,那样这个插件不是永远不会被加载?
其实Xadmin在创建插件实例的时候会将OptionClass的同名属性替换插件的属性。
这样在不同的OptionClass下会有不同的插件结果,实例如下:
classSomeModelAdmin(object):
say_hello=True...
site.register(SomeModel,SomeModelAdmin)
理解以上内容后,让我们再看看插件具体是如何起作用的。
在
AdminView
的执行过程中,可以被插件截获或修改的方法使用filter_hook()装饰,实例如下:
classListAdminView(ModelAdminView):
#可以被插件截获或修改的方法使用该装饰器装饰@filter_hookdefget_context(self):
使用
filter_hook()装饰的方法执行过程中会根据一定原则执行插件中的同名方法,具体信息查考该装饰器的文档内容。
xadmin.views.base.filter_hook(func)[source]
表明AdminView的方法可以被插件插入的装饰器。
执行使用了该装饰器的方法时,会按照以下过程执行:
1)首先将实例的plugins属性取出,取出含有同样方法名的插件
2)按照插件方法的priority属性排序
3)顺序执行插件方法,执行插件方法的规则:
3.1)如果插件方法没有参数,AdminView方法的返回结果不为空则抛出异常
3.2)如果插件方法的第一个参数为__,则AdminView方法将作为第一个参数传入,注
意,这时还未执行该方法,在插件中可以通过__()
执行,这样就可以实现插件
在AdminView方法执行前实现一些自己的逻辑,例如:
defget_context(self,__):
c={'
key'
:
value'
}c.update(__())returnc
3.3)如果插件方法的第一个参数不为__,则执行AdminView方法,将结果作为第一
个参数传入
4)最终将插件顺序执行的结果返回
根据该装饰器的执行原则:
如果我们想修改上面示例中ListAdminView的get_context的返回值,可以在插件中实现如下代码:
#在插件中加入同名方法,修改ListAdminView的get_context返回的值defget_context(self,context):
context.update({'
hello_target'
World!
!
})returncontext
如果我们希望插件在AdminView的方法前执行,或是完全使用自己的方法替代AdminView的方法可以这样:
#第一个参数为__。
这样__即为ListAdminView的get_context方法本身,此时还没有执行这个方法。
context={'
}#我们可以在任何时候执行AdminView的方法,或是根本不执行context.update(__())returncontext
至此,加入的插件就实现了对AdminView方法的完全控制。
模板插件
我们知道,Django中一个完整的View是包含模板的,模板用来生成View最终返回的HTML内容。
当然,插件也可以在模板中插入自己的内容。
我们来看看具体如何实现。
首先让我们来看看Xadmin中的模板代码示例片段(change_list.html):
{%loadxadmin%}...<
formid="
changelist-form"
action="
"
method="
post"
{%view_block'
result_list_form'
%}>
{%csrf_token%}{%view_block'
results_top'
%}<
divclass="
results"
{%ifresults%}...
其中的view_blockTag即为插件的插入点。
插件可以在自己的插件类中使用block_
+插入点名称方法将HTML片段插入到页面的这个位置,示例如下:
#context即为TemplateContext,nodes参数包含了其他插件的返回内容。
#您可以直接返回HTML片段,或是将内容加入到nodes参数中defblock_results_top(self,context,nodes):
returns"
<
divclass='
info'
Hello%s<
/div>
%context['
]
插件实例
下面让我们来看一个Xadmin中完整的插件实例:
fromdjango.templateimportloaderfromxadmin.sitesimportsitefromxadmin.viewsimportBaseAdminPlugin
fromxadmin.sitesimportsitefromxadmin.viewsimportListAdminViewREFRESH_VAR='
_refresh'
#该插件实现了一个列表页面刷新器的效果
classRefreshPlugin(BaseAdminPlugin):
#用户可以定制刷新的频率,可以传入多个值。
该属性会被OptionClass同名属性替换refresh_times=[]definit_request(self,*args,**kwargs):
#根据用户是否制定了刷新器来决定是否启动该插件returnbool(self.refresh_times)#插件拦截了返回Media的方法,加入自己需要的js文件。
defget_media(self,media):
ifself.request.GET.get(REFRESH_VAR):
#放页面处于自动刷新状态时,加入自己的js制定刷新逻辑media.add_js([self.static('
xadmin/js/refresh.js'
)])returnmedia#BlockViews#在页面中插入HTML片段,显示刷新选项。
defblock_top_toolbar(self,context,nodes):
current_refresh=self.request.GET.get(REFRESH_VAR)context.update({'
has_refresh'
bool(current_refresh),'
clean_refresh_url'
self.admin_view.get_query_string(remove=(REFRESH_VAR,)),'
current_refresh'
current_refresh,'
refresh_times'
[{'
time'
r,'
url'
self.admin_view.get_query_string({REFRESH_VAR:
r}),'
selected'
str(r)==current_refresh,}forrinself.refresh_times],})#可以将HTML片段加入nodes参数中nodes.append(loader.render_to_string('
xadmin/blocks/refresh.html'
context_instance=context))#注册插件
site.register_plugin(RefreshPlugin,ListAdminView)
最后不要忘记在适当的地方加载该代码,让其执行。
一般情况下,你可以将其写到adminx.py文件中,这样,只要您的APP加入到DjangoSettings的INSTALL_APPS中,Xadmin就会自动执行app下的adminx.py文件。
插件开发
了解了插件的运行原理后我们就可以开发自己的插件了。
首先我们需要了解插件类中的实用方法。
因为插件是继承BaseAdminPlugin类,而该类继承自:
class:
`~xadmin.views.BaseAdminObject`,所以这两个类的方法都可以在插件中使用。
Xadmin在创建插件时会自动注入以下属性到插件实例中:
request:
HttpRequest
user:
当前User对象
args:
View方法的args参数
kwargs:
View方法的kwargs参数
admin_view:
实例
admin_site:
Xadmin的
admin_site
对象实例
如果
是
ModelAdminView
的子类,还会自动注入以下属性:
model:
Model对象
opts:
Model的_meta属性
接下来您应该考虑打算制作什么功能的插件了。
不同功能的插件额能需要注册到不同的
上,xadmin系统中主要的
有:
BaseAdminView:
所有AdminView的基础类,注册在该View上的插件可以影响所有
的AdminView。
CommAdminView:
用户已经登陆后显示的View,也是所有登陆后View的基础类。
该
View主要作用是创建了Xadmin的通用元素,例如:
系统菜单,用户
信息等。
插件可以通过注册该View来修改这些信息。
ModelAdminView:
基于Model的
的基础类,注册的插件可以影响所有
基于Model的View。
ListAdminView:
Model列表页面View。
ModelFormAdminView
Model编辑页面View。
CreateAdminView
Model创建页面View。
UpdateAdminView
Model修改页面View。
DeleteAdminView
Model删除页面View。
DetailAdminView
Model详情页面View。
选择好目标AdminView后就要在自己的插件中编写方法来修改或增强这些
AdminView``。
其中每个AdminView可以拦截的方法及其介绍请参看各AdminView
的文档。
AdminSite
class
xadmin.sites.AdminSite(name='
admin'
app_name='
)[source]
xadmin最核心的类,管理整个xadmin站点的所有注册内容。
一般一个管理站点只有一个AdminSite实例,该实例主要完成以下工作:
1)注册管理所有xadmin需要的信息
2)创建
admin
view
class
3)注册djangourls
其中,xadmin需要的信息包括以下信息:
1)需要xadmin管理的models,以及各model的admin信息
2)注册的
3)注册的
model
4)注册的各种插件
1、admin_view(view,
cacheable=False)[source]
为当前AdminSite的所有View提供的Decorator。
主要是功能是使用AdminSite.has_permission()方法来判断当前用户是否有权限访问该AdminSite,如果没有,转到登陆页面。
通常情况下会在
AdminSite.get_urls()
方法中使用该方法
Parameters:
cacheable
–默认情况下,所有的AdminView会通过
never_cache
标记成不做缓存,如果确实需要缓存,可以设置cacheable=True
2、check_dependencies()[source]
检查运行xadmin需要的包是否已经正确安装
默认情况下会检查
ContentType
模块是否已经正确安装
3、copy_registry()[source]
复制当前AdminSite实例的信息
create_admin_view(admin_view_class)[source]
//xadmin.readthedocs.org/en/docs-chinese/site_api.html
get_view_class()
创建AdminView类,并且返回view方法,可以用于get_urls方法中
admin_view_class
–AdminView类
create_model_admin_view(admin_view_class,
model,
option_class)[source]
创建ModelAdminView类,并且返回view方法,可以用于get_urls方法中
–AdminView类,该类应该为
的子类
–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特有的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
关于AdminPlugin具体内容可以参看:
`~xadmin.views.base.BaseAdminPlugin`。
举例:
frommodelsimportSomeModelclassSomeModelAdmin(object):
passsite.register(SomeModel,SomeModelAdmin)
register_modelview(path,
admin_view_class,
name)[source]
将ModelBaseAdminView类注册到AdminSite,
path
–view对应的url路径
–注册的ModelBaseAdminView类
name
–view对应的urlname,要包含两个%%s,分别会替换为app_label和module_name
注册ModelBaseAdminView可以为每一个在xadmin注册的Model生成一个AdminView,并且包含相关的Model信息。
具体内容可以参看:
`~xadmin.views.base.ModelAdminView`。
fromxadmin.viewsimportModelAdminViewclassTestModelAdminView(ModelAdminView):
defget(self,request,obj_id):
passsite.register_modelview(r'
^(.+)/test/$'
TestModelAdminView,name='
%s_%s_test'
注册后,用户可以通过访问
/%(app_label)s/%(module
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- xadmin 帮助 文档
![提示](https://static.bdocx.com/images/bang_tan.gif)