xadmin帮助文档文档格式.docx

上传人:b****8 文档编号:22740254 上传时间:2023-02-05 格式:DOCX 页数:13 大小:22.47KB
下载 相关 举报
xadmin帮助文档文档格式.docx_第1页
第1页 / 共13页
xadmin帮助文档文档格式.docx_第2页
第2页 / 共13页
xadmin帮助文档文档格式.docx_第3页
第3页 / 共13页
xadmin帮助文档文档格式.docx_第4页
第4页 / 共13页
xadmin帮助文档文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

xadmin帮助文档文档格式.docx

《xadmin帮助文档文档格式.docx》由会员分享,可在线阅读,更多相关《xadmin帮助文档文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

xadmin帮助文档文档格式.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1