插件原理:

  Xadmin中每个页面都是一个AdminView对象返回的HTTPResponse结果。

  Xdamin插件所做的事情就是其实就是在AdminView执行过程中改变其执行逻辑或是改变其返回的结果,起到改变或者增强原有功能的效果

插件运行过程:

  1、自定义插件 需继承 BaseAdminPlugin

    class MyPlugin(BaseAdminPlugin):

      pass

  2、开发好的的插件 首先要注册到xadmin中

    from xadmin.sites import site

    site.register_plugin(MyPlugin,ListAdminView)

    具体注册到哪个AdminView根据自己的需要选择,这里ListAdminView是列表页面

  3、将插件注册到xadmin后,Xadmin在创建AdminView实例的时候,会将该插件放入实例的plugins属性中。

    当AdminView在处理请求时,会首先逐个调用plugins中插件的init_request()方法,插件在该方法中一般进行初始化操作并返回一个Boolean值,告诉AdminView是否要加载该插件

    class MyPlugin(BaseAdminPlugin):

      isExecute = False

      # 根据isExecute 属性值确定是否加载该插件

      def init_request(self, *args, **kwargs):

        return bool(self.isExecute)

    Xadmin在创建插件实例的时候,会将OptionClass的同名属性值替换插件的属性值。

    class SomeModelAdmin(object):

      # xadmin在创建插件实例的时候,会将这里的isExecute属性值替换插件中的isExecute属性值,来确定在此model中是否需要加载该插件

      isExecute = True

      pass

    xadmin.site.register(SomeModel, SomeModelAdmin)

  4、在AdminView执行过程中,可以被插件截获或者修改的方法使用@filter_hook()装饰

    class MyPlugin(BaseAdminPlugin):

      # 使用此装饰器来装饰方法表示该方法可以被插件截获或者修改

      @filter_hook  # xadmin.views.base.filter_hook

      def get_context(self):

        pass

  5、执行插件方法规则:

    1)如果插件的方法没有参数,而AdminView返回结果不为空,会抛出异常

    2)如果插件方法的第一个参数为_,则AdminView方法将会作为第一个参数传入,在插件中通过 _() 来执行。这样就可以实现插件在AdminView方法执行前实现自己的一些逻辑

      class MyPlugin(BaseAdminPlugin):

        def get_context(self, _):

          c = {"key":"value"}

          c.update(_())  # 此时才执行AdminView方法

          return c

    3)如果插件第一个参数不为_,则执行AdminView的方法,将结果作为第一个参数传入

  6、在HTML界面插入插件

    class MyPlugin(BaseAdminPlugin):

      def block_top_toolbar(self, context, nodes):

        ...

        nodes.append(loader.render_to_string("template.html", context_instance = context))

  7、写对应的template.html

  8、将写好的插件加入xadmin-->plugins--->__init__.py文件中

      

  

四、xadmin自定义插件1的更多相关文章

  1. 五、xadmin自定义插件2

    以导入插件为例说明: 1.在xadmin-->plugins下面新建excel.py文件 2.新建ListExcelImportPlugin类,继承BaseAdminPlugin from xa ...

  2. BrnShop开源网上商城第四讲:自定义插件

    重要通知:BrnShop企业版NOSQL设计(基于Redis)已经开源!源码内置于最新版的BrnShop中,感兴趣的园友可以去下载来看看.官网地址:www.brnshop.com. 好了现在进入今天的 ...

  3. Cordova入门系列(四)自定义Cordova插件--showToast

    前三篇Cordova入门系列,简单讲解了Cordova,以及如何调用Cordova插件,今天我们讲解一下如何自己做一个插件. 自定义插件,就是自己写一些安卓java代码,然后和js代码以及配置文件,封 ...

  4. cordova3.X 运用grunt生成plugin自定义插件骨架

    Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头.麦克风等.Cordova还提供了一组统一的JavaScript类库,以及为这些 ...

  5. CKEditor在线编辑器增加一个自定义插件

    CKEditor是一个非常优秀的在线编辑器,它的前身就是FCKEditor,CKEditor据官方说是重写了内核的,但功能和性能比FCKEditor更为强大和优越.记得07年的时候第一次接触FCKEd ...

  6. BrnShop:自定义插件

    BrnShop开源网上商城第四讲:自定义插件 重要通知:BrnShop企业版NOSQL设计(基于Redis)已经开源!源码内置于最新版的BrnShop中,感兴趣的园友可以去下载来看看.官网地址:www ...

  7. Gradle 1.12用户指南翻译——第二十四章. Groovy 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  8. cordova自定义插件的创建过程

    最近学习了cordova插件,记录一下大概的过程,仅供参考. 前期的配置就不记录了网上好多. 在简书上从新写了一个更详细的cordova插件教程,有需要的可以点这里进去看看. 第一步 创建一个cord ...

  9. Cordova与现有框架的结合,Cordova插件使用教程,Cordova自定义插件,框架集成Cordova,将Cordova集成到现有框架中

    一.框架集成cordova 将cordova集成到现有框架中 一般cordova工程是通过CMD命令来创建一个工程并添加Android.ios等平台,这样的创建方式可以完整的下载开发过程中所需要的的插 ...

随机推荐

  1. sqlserver waitfor time 延迟函数的用法

    SQL有定时执行的语句 WaitFor,可以写到一个存储过程中再执行一次 语法:WaitFor{Delay 'time'|Time 'time} Delay后面的时间为延迟多少时间执行 Time后面的 ...

  2. Spring Cloud Config 配置属性覆盖优先级。

    /** * Flag to indicate that the external properties should override system properties. * Default tru ...

  3. pycharm 新建文件自动添加表头信息

    根据图示设置: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : ${DATE} ${TIME} # @Author : Adong

  4. DB2常见错误信息

    000 00000 SQL语句成功完成01xxx SQL语句成功完成,但是有警告+012 01545 未限定的列名被解释为一个有相互联系的引用+098 01568 动态SQL语句用分号结束+100 0 ...

  5. 4、爬虫系列之mongodb

    mongodb mongo简介 简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB是一个介于关系数据库和非关系数 ...

  6. 超简单的gif图制作工具

    测试成功了: 软件灵者Gif录制1.0 使用方法注意: 扩展: 安卓端想要制作gif可参考此方法(还没测试):https://blog.csdn.net/u012604745/article/deta ...

  7. MySQL高级知识(十一)——Show Profile

    前言:Show Profile是mysql提供的可以用来分析当前会话中sql语句执行的资源消耗情况的工具,可用于sql调优的测量.默认情况下处于关闭状态,并保存最近15次的运行结果. 1.分析步骤 # ...

  8. java中伪共享问题

    伪共享(False Sharing) 原文地址:http://ifeve.com/false-sharing/ 作者:Martin Thompson  译者:丁一 缓存系统中是以缓存行(cache l ...

  9. 用deepin堆砌工作环境

    用deepin堆砌工作环境 这篇文章记录了我用 deepin 15.5搭建工作环境的过程,供我个人在未来重装系统时参考.对于其他以 deepin 操作系统作为主要工作平台的看官,咱们是相亲相爱的一家人 ...

  10. Python中的__new__()方法与实例化

    @Python中的__new__()方法与实例化   __new__()是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在Python 中 存在于类里面的构造方法__init__ ...