博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flask学习记录之Flask-Admin
阅读量:4653 次
发布时间:2019-06-09

本文共 2707 字,大约阅读时间需要 9 分钟。

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

初始化:

from flask import Flaskfrom flask_admin import Adminapp = 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')生成urladmin.add_view(MyView(name='Hello')) #添加一个在Test标签下添加一个Hello 1菜单,路由为test1#这个视图在外部通过url_for('test1.index')生成urladmin.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 ModelViewfrom .models import User# Flask and Flask-SQLAlchemy initialization hereadmin = Admin(app)admin.add_view(ModelView(User, db.session))

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

from flask_admin.contrib.sqla import ModelView# Flask and Flask-SQLAlchemy initialization hereclass 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 FileAdminimport os.path as op# Flask setup hereadmin = Admin(app)path = op.join(op.dirname(__file__), 'static')admin.add_view(FileAdmin(path, '/static/', name='Static Files'))

 

转载于:https://www.cnblogs.com/agmcs/p/4452170.html

你可能感兴趣的文章
Android中处理崩溃异常
查看>>
Day7—socket进阶
查看>>
只读数据文件损坏恢复
查看>>
转过来的,可以看下
查看>>
windows搭建SVN服务MD版
查看>>
Java私塾的一些基础练习题(一)
查看>>
Shell 07 项目案例
查看>>
Dapper基础用法
查看>>
一步步学习SPD2010--第九章节--使用可重用工作流和工作流表单(1)--创建和使用可重用工作流...
查看>>
Network 第六篇 - 三层交换机配置路由功能
查看>>
OSL LLVM 3.3 Related Changes
查看>>
1.4 99乘法表
查看>>
雇佣K个工人的最小费用 Minimum Cost to Hire K Workers
查看>>
mysql优化方法
查看>>
[转]【HttpServlet】HttpServletResponse接口 案例:完成文件下载
查看>>
Eclipse配置默认的编码集为utf-8
查看>>
初学Python
查看>>
rman 脚本备份全过程
查看>>
图像处理笔记(十八):模板匹配
查看>>
Educational Codeforces Round 60 D. Magic Gems
查看>>