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'))

 

posted @ 2015-04-23 23:34  agmcs  阅读(3084)  评论(0编辑  收藏  举报