插件原理:

  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. Mac上一条命令搭建web服务器

    实际测试工作中偶尔会需要搭建Web服务器环境,由于Mac OS X自带了Apache和PHP环境,只需要简单的启动就可以. 开启Apache 开启Web服务器的方法有两种(默认启动端口号是80): 打 ...

  2. 关于wordpress慢的问题

    随笔记载: 关于wordpress访问慢的原因,主要是wordpress采用了google前端库, 需替换wordpress/wp-includes/script-header.php中所有的goog ...

  3. SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Object Plans' cachestore (part of plan cache) due to some database maintenance or reconfigure operations.

    2017-11-01 09:49:44.35 spid166 SQL Server has encountered 1 occurrence(s) of cachestore flush for th ...

  4. UICollectionView 基础

    在iOS开发中经常会用到UICollectionView,和UITableView同样即成UIScrollView 但是操作起来比UITableVIew要麻烦一些 ,有些地方需要注意,一下是UICol ...

  5. LeetCode算法题-Ugly Number(Java实现-四种解法)

    这是悦乐书的第199次更新,第208篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第64题(顺位题号是263).编写一个程序来检查给定的数字是否是一个丑陋的数字.丑陋的数 ...

  6. LeetCode算法题-Valid Palindrome(Java实现)

    这是悦乐书的第174次更新,第176篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第33题(顺位题号是125).给定一个字符串,确定它是否是回文,只考虑字母数字字符并忽略 ...

  7. 《Linux服务器的监控》

    本文地址:http://www.cnblogs.com/aiweixiao/p/7131532.html 原文地址(公众号):http://t.cn/RKwmqUs 点击关注 微信公众号 1. 监控概 ...

  8. 在线编辑器ACE Editor的使用

    ACE 是一个开源的.独立的.基于浏览器的代码编辑器,可以嵌入到任何web页面或JavaScript应用程序中.ACE支持超过60种语言语法高亮,并能够处理代码多达400万行的大型文档.ACE开发团队 ...

  9. PostgreSQL条件表达式 case when then end

    例: SELECT CASE WHEN (store_size <= (100)::NUMERIC) THEN '小店'::TEXT WHEN (store_size >= (200):: ...

  10. B. Yet Another Array Partitioning Task ——cf

    B. Yet Another Array Partitioning Task time limit per test 2 seconds memory limit per test 256 megab ...