zoukankan      html  css  js  c++  java
  • 个人技术总结——Flask-Admin扩展

    一、技术概述

    Flask-Admin是一个功能齐全、简单易用的Flask扩展,可以为Flask应用程序增加管理界面。用这样一种方式实现管理后台,开发者拥有应用程序的外观和功能的全部控制权。

    二、技术详述

    这个库使用一个简单而强大的概念——管理部件,是用视图方法构建的类:

    class MyView(BaseView):
        @expose('/')
        def index(self):
            return self.render('admin/myindex.html')
    
        @expose('/test/')
        def test(self):
            return self.render('admin/test.html')
    

    如果用户访问index视图,模板文件admin/myindex.html会被渲染。同样的,访问test视图的结果是admin/test.html被渲染。

    • 初始化

    要开始使用Flask-Admin,需要创建一个Admin类实例并和Flask应用程序实例关联。

    from flask import Flask
    from flask.ext.admin import Admin
    
    app = Flask(__name__)
    
    admin = Admin(app)
    # Add administrative views here
    
    app.run()
    
    • 增加视图

    增加一个衍生于BaseView类的管理视图:

    from flask import Flask
    from flask.ext.admin import Admin, BaseView, expose
    
    class MyView(BaseView):
        @expose('/')
        def index(self):
            return self.render('index.html')
    
    app = Flask(__name__)
    
    admin = Admin(app)
    admin.add_view(MyView(name='Hello'))
    
    app.run()
    
    • 身份验证

    Flask-Admin默认管理界面是完全开放的,要控制使用管理界面,可以指定is_accessible方法:

    class MyView(BaseView):
        def is_accessible(self):
            return login.current_user.is_authenticated()
    
    • 生成URL

    在内部,视图类工作于Flask蓝图的顶部,因此可以使用url_for附带一个.前缀来获得局部视图的URL:

    from flask import url_for
    
    class MyView(BaseView):
        @expose('/')
        def index(self)
            # Get URL for the test view method
            url = url_for('.test')
            return self.render('index.html', url=url)
    
        @expose('/test/')
        def test(self):
            return self.render('test.html')
    
    • 模型视图

    模型视图允许你为数据库中的每个模型增加专用的管理页面。通过创建ModelView类实例来实现,ModelView类可从Flask-Admin内置的ORM后端引入。一个SQLAlchemy后端的例子:

    from flask.ext.admin.contrib.sqla import ModelView
    
    # Flask and Flask-SQLAlchemy initialization here
    
    admin = Admin(app)
    admin.add_view(ModelView(User, db.session))
    

    三、技术使用中遇到的问题和解决过程

    Flask-Admin有add_view视图函数,给admin添加视图的时候,不能放在create_app里。虽然运行没有报错,但是在单元测试的时候会出现蓝本重复注册,正确的方法是在create_app外面调用add_view

    admin = Admin(name=u'应用名称')
    
    # 正确示例
    admin.add_view(ModelView(name='板块', category='标签'))
    
    def create_app(config_name):
        app = Flask(__name__)
        app.config.from_object(config[config_name])
        config[config_name].init_app(app)
    
        admin.init_app(app)
    
    # 错误示例
    admin.add_view(ModelView(name='板块', category='标签'))
    
    return app
    

    四、总结

    合理应用Flask Admin,可以用极少量的代码,快速构建小型WEB应用。

    五、参考文献

  • 相关阅读:
    使<div>做的层不随滚动条的移动而移动
    datagrid 实现 表头水平可以移动 垂直固定
    csapp 、sicp 、深入理解计算机系统、 计算机程序的构造和解释
    window.open使用
    C#进程管理
    asx根据时间点播放
    Ext GrdPanel多种取值方式
    System.ComponentModel.Win32Exception: 拒绝访问
    播放器Object使用
    M3U文件格式
  • 原文地址:https://www.cnblogs.com/imclaudia/p/13193290.html
Copyright © 2011-2022 走看看