zoukankan      html  css  js  c++  java
  • 四、xadmin自定义插件1

    插件原理:

      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文件中

          

      

  • 相关阅读:
    不同进程间消息互发
    不同进程间消息互发
    div滤镜结合ajax,实现登录
    网页自适应不同浏览器和分辨率[转]
    DIV样式汇总
    用CSS中的Alpha实现渐变
    JavaScript中的null和undefined
    CSS教程:div垂直居中的N种方法[转]
    浏览器不兼容原因及解决办法
    JavaScript验证时间格式
  • 原文地址:https://www.cnblogs.com/fiona-zhong/p/9519171.html
Copyright © 2011-2022 走看看