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'))
Flask学习记录之Flask-Admin的更多相关文章
- [ZHUAN]Flask学习记录之Flask-SQLAlchemy
From: http://www.cnblogs.com/agmcs/p/4445583.html 各种查询方式:http://www.360doc.com/content/12/0608/11/93 ...
- Flask学习记录之Flask-SQLAlchemy
Flask-SQLAlchemy库让flask更方便的使用SQLALchemy,是一个强大的关系形数据库框架,既可以使用orm方式操作数据库,也可以使用原始的SQL命令. Flask-Migrate ...
- Flask学习记录之Flask-Login
Flask-Loging 可以方便的管理用户会话,保护路由只让认证用户访问 http://flask-login.readthedocs.org/en/latest/ 一.初始化Flask-Login ...
- Flask学习记录之MarkDown编辑文本
为了让网页支持markdown编辑文本,使用如下了4个库 PageDown : 在前端提供一个可以实时将markdown内容转换成html文本进行效果预览的编辑器 Flask-PageDown: 这个 ...
- Flask学习记录之Flask-Migrate
一.配置Flask-Migrate from flask.ext.migrate import Migrate, MigrateCommand migrate = Migrate(app,db) #第 ...
- Flask学习记录之Flask-WTF
Flask-wtf时Wtforms库的flask框架扩展,能够方便的处理Web表单 一.定义一个web表单 使用flask-wtf时,每个web表单都由一个继承自flask.ext.wtf.Form的 ...
- Flask学习记录之Flask-Moment
Moment.js 是一个简单易用的轻量级JavaScript日期处理类库,提供了日期格式化.日期解析等功能.它支持在浏览器和NodeJS两种环境中运行.此类库能够 将给定的任意日期转换成多种不同的格 ...
- Flask学习记录之Flask-Mail
Flask-Mail可以连接到配置中的SMTP服务器,进行邮件发送,如果没有进行SMTP服务器的配置,将会默认连接到localhost上的 一.配置及初始化 (1)flask应用配置 #配置选项 MA ...
- Flask学习记录之使用Werkzeug散列密码
数据库中直接存放明文密码是很危险的,Werkzeug库中的security能够方便的实现散列密码的计算 security库中 generate_password_hash(password,metho ...
随机推荐
- d3可视化实战01:理解SVG元素特性
一. SVG简介 ————————————————————————————————————————————————————————————————— SVG是一种和图像分辨率无关的矢量图形格式,它使用 ...
- LINQ 学习笔记(1)
学习资源参考 : http://www.cnblogs.com/lifepoem/archive/2011/12/16/2288017.html 常用方法是 Where, OrderBy, Selec ...
- 体验Lua
想用之和NGINX结合,终结公司混乱的NGINX配置 玩起来先,感觉很精简,很实用哟. print("hello world") a={,} b=a print(a==b,a~=b ...
- PADS Layout将导入DXF,并转换成板框步骤
1.在PADS Layout中选择 Import... 2.选择DXF文件(一般由结构工程师给出),直接点OK即可. 3.导入后,板框图一角视图如下.右键选择 Select Shapes,然后双击外框 ...
- 许多js框架或js库的min版本是怎么做出来的?
如jQuery,Bootstrap,AngularJs,这些都有min版本,代码更加精简,功能却相同.看了源代码,几乎不可读. 这种事情的工具类型叫做“minifier”.请看传送门:Minifica ...
- 【HDOJ】1403 Longest Common Substring
后缀数组2倍增可解. #include <cstdio> #include <cstring> #include <cstdlib> #define MAXM 28 ...
- 数组、List和ArrayList的区别
有些知识点可能平时一直在使用,不过实际开发中我们可能只是知其然不知其所以然,所以经常的总结会对我们的提高和进步有很大的帮助,这里记录自己在工作之余的问题,持续更新,欢迎高手斧正. 数组.List和Ar ...
- Android中Intent的使用
1./以下是常用到的Intent的URI及其示例,包含了大部分应用中用到的共用Intent. //一.打开一个网页,类别是Intent.ACTION_VIEW Uri uri = Uri.parse( ...
- NOI2014题解
起床困难综合症(BZOJ 3668) 送分题,直接从高位向低位贪心. 魔法森林(BZOJ 3669) 一个容易想到的办法就是枚举A的最大值,以B作为权值求最小生成树.暴力的话要T的.如果从小到大枚举A ...
- (转)iOS如何取得APP的版本信息跟服务器对比进行升级提示?
关键是自动取版本信息: [NSString stringWithFormat:@"Version %@",[[NSBundle mainBundle] objectForInfoD ...