zoukankan      html  css  js  c++  java
  • Flask学习记录之Flask-Admin

    相信用过Django框架的都不会忘记它强大的Admin功能,Flask-admin是一款能够与Django Admin所媲美的扩展,能够快速创建Web管理界面,实现了用户、文件增删改查等常用功能;也可以通过修改模板文件来定制管理页面.

    初始化:

    from flask import Flask
    from flask_admin import Admin
    
    app = Flask(__name__)
    
    admin = Admin(app)
    # Add administrative views here
    #也可以指定name属性来命名admin = Admin(app, name='Super Administrator')
    app.run()

    Flask-admin将后台的每一个菜单选项看作一个View对象,View对象要通过flask-admin实例对象注册后才能显示

    from flask_admin import Admin, BaseView, expose
    
    #继承一个BaseView定义一项管理菜单
    class MyView(BaseView):
        #127.0.0.1:5000/admin/
        @expose('/')
        def index(self):
            return self.render('index.html')
    
    #添加一个Hello菜单,这个视图可以在外部通过url_for('myview.index')生成url
    admin.add_view(MyView(name='Hello'))
    #添加一个在Test标签下添加一个Hello 1菜单,路由为test1 #这个视图在外部通过url_for('test1.index')生成url admin.add_view(MyView(name='Hello 1', endpoint='test1', category='Test')) admin.add_view(MyView(name='Hello 2', endpoint='test2', category='Test')) admin.add_view(MyView(name='Hello 3', endpoint='test3', category='Test'))

    效果如图:

    安全

    flask-admin不提供后台的安全认证,默认情况下,管理界面是完全公开的,不过你可以自己实现认证的逻辑,或者使用flask-login提供的.在定义View时覆盖父类的is_accessible()方法 ,返回False则禁止访问

    class MyView(BaseView):
        def is_accessible(self):
            return login.current_user.is_authenticated()

    模型

    flask-admin可以通过创建ModelView类实例实现模型的管理

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

    可以通过继承ModelView来定制模型管理内容

    from flask_admin.contrib.sqla import ModelView
    
    # Flask and Flask-SQLAlchemy initialization here
    
    class MyView(ModelView):
        # 是否允许创建
        can_create = False
    
        # 显示的字段
        column_list = ('login', 'email')
    
        def __init__(self, session, **kwargs):
            # You can pass name and other parameters if you want to
            super(MyView, self).__init__(User, session, **kwargs)
    
    admin = Admin(app)
    admin.add_view(MyView(db.session))

    1.指定可搜索的字段:

    column_searchable_list = ('name', 'email') 或者column_searchable_list = (User.name, User.email)

    2.指定过滤器:

     column_filters = ('user', 'email') 或者 
    column_filters = (BooleanEqualFilter(User.name, 'Name'))

    3.设置内联对象:

     时创建或修改时可以同时创建内联对象,内联对象必须是与这个对象建立了关系的.如图,创建新用户时可以同时创建他的文章,如图


    (1)inline_models = (Article,) 直接创建

    (2)inline_models = [(Article, dict(form_columns=['title']))]指定内联对象显示的字段,这里只显示title

    (3)Django方式创建内联对象:

    class MyInlineModelForm(InlineFormAdmin):
        form_columns = ('title', 'date')
    
    class MyModelView(ModelView):
        inline_models = (MyInlineModelForm(MyInlineModel),)

    文件管理

    from flask.ext.admin.contrib.fileadmin import FileAdmin
    
    import os.path as op
    
    # Flask setup here
    
    admin = Admin(app)
    
    path = op.join(op.dirname(__file__), 'static')
    admin.add_view(FileAdmin(path, '/static/', name='Static Files'))
  • 相关阅读:
    VS2013 连接 MySQL
    2014年下半年的目标
    BI开发之——Mdx基础语法(2)(转至指尖流淌)
    BI开发之——Mdx基础语法(转至指尖流淌)
    数据仓库构建
    数据仓库的定义
    2014年计划:
    [转载]商业智能的三个层次
    BI入门基础知识-1
    ASP.NET MVC4 异常拦截
  • 原文地址:https://www.cnblogs.com/agmcs/p/4452170.html
Copyright © 2011-2022 走看看