ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:22.47KB ,
资源ID:22740254      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22740254.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(xadmin帮助文档文档格式.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

xadmin帮助文档文档格式.docx

1、import xadminxadmin.autodiscover()# version模块自动注册需要版本控制的 Modelfrom xadmin.plugins import xversionurlpatterns = patterns( url(radmin/, include(xadmin.site.urls),打开浏览器, 输入http:/127.0.0.1:8000看一下效果吧。2、Xadmin功能特征1、基于Bootstrap3 Xadmin使用Bootstrap3.0框架精心打造。基于Bootstrap3,Xadmin天生就支持在多种屏幕上无缝浏览,并完全支持Bootstrap主

2、题模板,让您的管理后台也动感、多样起来。2、内置功能丰富Xadmin作为一款全面的后台管理系统框架,不仅提供了基本的CRUD功能,还内置了丰富的插件功能。包括数据导出、书签、图表、数据添加向导及图片相册等多种扩展功能。3、强大的插件系统Xadmin的插件系统借鉴了其他领域成功框架的设计思想,让插件可以扩展系统的任何一个功能点。对于开发者,Xadmin的插件开发简单;对于使用者,Xadmin的插件安装方便。4、强大的过滤器功能数据筛选是Xadmin的强项。通过Xadmin的过滤器,您可以使用模糊查找,数字范围查找,日期范围查找等多种高级查找方式。并且可以将您的查询结果存为书签方便今后使用。5、完

3、善的系统权限Xadmin安全系统,控制粒度可以精细到每行数据,甚至每个字段,结合角色及用户组,几乎可以胜任任何变态的权限系统要求。Xadmin 插件制作插件原理 Xadmin 的插件系统架构设计一定程度上借鉴了wordpress的设计。想要了解Xadmin 的插件系统架构首先需要了解XadminAdminView的概念。简单来说,就是 Xadmin 系统中每一个页面都是一个AdminView对象返回的HttpResponse结果。xadmin的插件系统做的事情其实就是在AdminView运行过程中改变其执行的逻辑,或是改变其返回的结果,起到修改或增强原有功能的效果。下面让我们看看整个插件从制作

4、完成到实际运行的整个过程。首先需要创建自己的插件类, 插件类继承BaseAdminPluginclass HelloWorldPlugin(BaseAdminPlugin): .开发好的插件首先要注册到 Xadmin 中, 示例代码如下:# ListAdminView 是 Model 列表页面xadmin.site.register_plugin(HelloWorldPlugin, ListAdminView)其中插件的注册和使用可以参看xadmin.sites.AdminSite.register_plugin()当将插件注册到 Xadmin 后,Xadmin 在创建AdminView实例的

5、时候会将该插件放入实例的plugins属性。当AdminView在处理请求 时,会首先逐个调用plugins中插件的init_request()方法,插件在该方法中一般进行初始化的操作并且返回一个 Boolean 值告诉AdminView是否需要加载该插件。当init_request()方法返回值为False时,AdminView不会加载该插件。实例如下: say_hello = False # 初始化方法根据 say_hello属性值返回 def init_request(self, *args, *kwargs): return bool(self.say_hello)在以上实例中,插件根

6、据自身的say_hello属性来决定是否让自己被加载。您可能会迷惑,say_hello属性看起来一直会是False呀,那样这个插件不是永远不会被加载? 其实 Xadmin 在创建插件实例的时候会将OptionClass的同名属性替换插件的属性。这样在不同的OptionClass下会有不同的插件结果,实例如下:class SomeModelAdmin(object): say_hello = True .site.register(SomeModel, SomeModelAdmin)理解以上内容后,让我们再看看插件具体是如何起作用的。在AdminView的执行过程中,可以被插件截获或修改的方法使

7、用filter_hook()装饰,实例如下:class ListAdminView(ModelAdminView): # 可以被插件截获或修改的方法使用该装饰器装饰 filter_hook def get_context(self):使用filter_hook()装饰的方法执行过程中会根据一定原则执行插件中的同名方法,具体信息查考该装饰器的文档内容。xadmin.views.base.filter_hook(func)source表明 AdminView 的方法可以被插件插入的装饰器。执行使用了该装饰器的方法时,会按照以下过程执行:1)首先将实例的 plugins 属性取出,取出含有同样方法名

8、的插件2)按照插件方法的priority属性排序3)顺序执行插件方法,执行插件方法的规则:3.1)如果插件方法没有参数,AdminView 方法的返回结果不为空则抛出异常3.2)如果插件方法的第一个参数为_,则 AdminView 方法将作为第一个参数传入,注 意,这时还未执行该方法,在插件中可以通过_()执行,这样就可以实现插件 在AdminView 方法执行前实现一些自己的逻辑,例如: def get_context(self, _): c = key:value c.update(_() return c 3.3)如果插件方法的第一个参数不为_,则执行 AdminView 方法,将结果作

9、为第一 个参数传入4)最终将插件顺序执行的结果返回根据该装饰器的执行原则:如果我们想修改上面示例中ListAdminView的get_context的返回值,可以在插件中实现如下代码: # 在插件中加入同名方法,修改ListAdminView 的get_context返回的值 def get_context(self, context): context.update(hello_targetWorld!) return context如果我们希望插件在AdminView的方法前执行,或是完全使用自己的方法替代AdminView的方法可以这样: # 第一个参数为_。这样_即为ListAdmin

10、View的get_context方法本身,此时还没有执行这个方法。 context = #我们可以在任何时候执行AdminView的方法,或是根本不执行 context.update(_() return context至此,加入的插件就实现了对AdminView方法的完全控制。模板插件我们知道,Django 中一个完整的 View 是包含模板的,模板用来生成 View 最终返回的 HTML 内容。当然,插件也可以在模板中插入自己的内容。我们来看看具体如何实现。首先让我们来看看 Xadmin 中的模板代码示例片段 (change_list.html):% load xadmin %.% csr

11、f_token % % view_block results_top % div class=results % if results % .其中的view_block Tag 即为插件的插入点。插件可以在自己的插件类中使用block_+插入点名称方法将 HTML 片段插入到页面的这个位置,示例如下: # context 即为 TemplateContext, nodes 参数包含了其他插件的返回内容。 # 您可以直接返回 HTML 片段,或是将内容加入到 nodes 参数中 def block_results_top(self, context, nodes): return sdiv cl

12、ass=infoHello %s % context插件实例下面让我们来看一个 Xadmin 中完整的插件实例:from django.template import loaderfrom xadmin.sites import sitefrom xadmin.views import BaseAdminPluginfrom xadmin.sites import sitefrom xadmin.views import ListAdminViewREFRESH_VAR = _refresh# 该插件实现了一个列表页面刷新器的效果class RefreshPlugin(BaseAdminPlu

13、gin): #用户可以定制刷新的频率,可以传入多个值。该属性会被 OptionClass同名属性替换 refresh_times = def init_request(self, *args, *kwargs): # 根据用户是否制定了刷新器来决定是否启动该插件 return bool(self.refresh_times) # 插件拦截了返回 Media 的方法,加入自己需要的 js 文件。 def get_media(self, media): if self.request.GET.get(REFRESH_VAR): # 放页面处于自动刷新状态时,加入自己的 js 制定刷新逻辑 medi

14、a.add_js(self.static(xadmin/js/refresh.js) return media # Block Views # 在页面中插入 HTML 片段,显示刷新选项。 def block_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

15、=(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, for r in self.refresh_times, ) # 可以将 HTML 片段加入 nodes 参数中 nodes.append(loader.render_to_string(xadmin/blocks/refresh.html, context_instance=

16、context)# 注册插件site.register_plugin(RefreshPlugin, ListAdminView)最后不要忘记在适当的地方加载该代码,让其执行。一般情况下,你可以将其写到 adminx.py 文件中,这样,只要您的 APP 加入到 Django Settings 的 INSTALL_APPS 中, Xadmin 就会自动执行 app 下的 adminx.py 文件。插件开发了解了插件的运行原理后我们就可以开发自己的插件了。首先我们需要了解插件类中的实用方法。因为插件是继承BaseAdminPlugin类,而该类继承自 :class:xadmin.views.Bas

17、eAdminObject,所以这两个类的方法都可以在插件中使用。Xadmin 在创建插件时会自动注入以下属性到插件实例中:request : Http Requestuser : 当前 User 对象args : View 方法的 args 参数kwargs : View 方法的 kwargs 参数admin_view :实例admin_site : Xadmin 的admin_site对象实例如果是ModelAdminView的子类,还会自动注入以下属性:model : Model 对象opts : Model 的 _meta 属性接下来您应该考虑打算制作什么功能的插件了。不同功能的插件额能

18、需要注册到不同的上,xadmin系统中 主要的有:BaseAdminView : 所有AdminView的基础类,注册在该View上的插件可以影响所有 的AdminView。CommAdminView : 用户已经登陆后显示的 View,也是所有登陆后 View 的基础类。该 View主要作用是创建了 Xadmin 的通用元素,例如:系统菜单,用户 信息等。插件可以通过注册该 View 来修改这些信息。ModelAdminView : 基于 Model 的的基础类,注册的插件可以影响所有 基于 Model 的 View。ListAdminView : Model 列表页面 View。Model

19、FormAdminView Model 编辑页面 View。CreateAdminView Model 创建页面 View。UpdateAdminView Model 修改页面 View。DeleteAdminView Model 删除页面 View。DetailAdminView Model 详情页面 View。选择好目标AdminView后就要在自己的插件中编写方法来修改或增强这些AdminView。其中每个AdminView可以拦截的方法及其介绍请参看各AdminView的文档。AdminSiteclassxadmin.sites.AdminSite(name=admin,app_nam

20、e=)sourcexadmin最核心的类,管理整个xadmin站点的所有注册内容。一般一个管理站点只有一个AdminSite实例,该实例主要完成以下工作:1)注册管理所有 xadmin 需要的信息2)创建adminviewclass3)注册 django urls其中,xadmin 需要的信息包括以下信息:1)需要 xadmin 管理的 models,以及各 model 的 admin 信息2)注册的3)注册的model4)注册的各种插件1、admin_view(view,cacheable=False)source 为当前AdminSite的所有View提供的Decorator。主要是功能是

21、使用AdminSite.has_permission()方法来判断当前用户是否有权限访问该AdminSite, 如果没有,转到登陆页面。通常情况下会在AdminSite.get_urls()方法中使用该方法Parameters:cacheable 默认情况下,所有的 AdminView 会通过never_cache标记成不做缓存,如果确实需要缓存,可以设置 cacheable=True2、check_dependencies()source检查运行xadmin需要的包是否已经正确安装默认情况下会检查ContentType模块是否已经正确安装3、copy_registry()source复制当前

22、 AdminSite 实例的信息create_admin_view(admin_view_class)source/xadmin.readthedocs.org/en/docs-chinese/site_api.htmlget_view_class()创建 AdminView 类,并且返回 view 方法,可以用于 get_urls 方法中admin_view_class AdminView 类create_model_admin_view(admin_view_class,model,option_class)source创建 ModelAdminView 类,并且返回 view 方法,可以

23、用于 get_urls 方法中 AdminView 类,该类应该为的子类 Model 类,目前该参数暂无作用option_class Model 的 OptionClass,保存对该 Model 的相关定制get_plugins(admin_view_class,*option_classes)sourcexadmin中核心方法,用于获取 AdminViewClass 的 plugins。获取 plugins 首先根据该 AdminViewClass 及其所有的集成类在已经注册的插件中找到相应的插件类。然后再使用第二个参数的 OptionClass 拼成插件类。get_view_class(v

24、iew_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则说明req

25、uest.user至少能够访问当前xadmin网站。否则无法访问xadmin的任何页面。register(model_or_iterable,admin_class=type object*options)source注册需要管理的 Model, 或是注册某 AdminView 的 OptionClassmodel_or_iterable 传入 model 或是指定的 ModelOptionClassadmin_class 当 model_or_iterable 为 Model 时,该参数为 ModelAdmin;model_or_iterable 为 AdminView 时 ,该参数为 Op

26、tionClass关于 Admin Plugin 具体内容可以参看 :xadmin.views.base.BaseAdminPlugin。 举例:from models import SomeModelclass SomeModelAdmin(object): passsite.register(SomeModel, SomeModelAdmin)register_modelview(path,admin_view_class,name)source将 Model Base Admin View 类注册到 AdminSite,path view对应的url路径 注册的 Model Base A

27、dmin View 类name view对应的url name, 要包含两个%s, 分别会替换为 app_label和module_name注册 Model Base Admin View 可以为每一个在xadmin注册的 Model 生成一个 Admin View,并且包含相关的 Model 信息。 具体内容可以参看 :xadmin.views.base.ModelAdminView。from xadmin.views import ModelAdminViewclass TestModelAdminView(ModelAdminView): def get(self, request, obj_id): passsite.register_modelview(r(.+)/test/$, TestModelAdminView, name=%s_%s_test注册后,用户可以通过访问/%(app_label)s/%(module

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

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