ModelView    表管理,进入权限
BaseView,expose  自定义视图
AdminIndexView  进入权限
FileAdmin   文件管理
from flask_admin import Admin
from flask_admin.contrib.fileadmin import FileAdmin
from flask_admin import Admin, expose, BaseView
from flask_admin.contrib.sqla import ModelView
#flask-admin国际化多语言
from flask_babelex import Babel
app = Flask(__name__)
babel = Babel(app)
app.config['BABEL_DEFAULT_LOCALE'] = 'zh_CN'
# 初始化admin后台
admin = Admin(app, name='env manager')
# 也可对后台首页进行自定义
# 后台标题修改为"导航栏",主页设置为welcome.html,后台url也修改
admin = Admin(app,index_view=AdminIndexView(name='导航栏',template='welcome.html',url='/admin'))
# 或如下,其中MyAdminIndexView()继承AdminIndexView()
admin = Admin(app,name='管理中心',index_view=MyAdminIndexView(),base_template='admin/my_master.html')
# 定义后台对表可增加、可编辑、可导出,可搜索,只显示指定的列
class HashView(ModelView):create_modal = Trueedit_modal = Truecan_export = Truecolumn_searchable_list = ['title']
column_list = ('id', 'title','timestamp','count','content'')column_labels = {'id':'序号','title' : '新闻标题','timestamp':'发布时间','count':'浏览次数','content':'新闻内容'}
#或者下面这种写法
column_labels = dict(username='用户名',)
#不显示指定的列column_exclude_list = ('password_hash',)
# 自定义视图
# 每个自定义视图必须提供一个@expose('/') 的index方法,否则会报错
class UserView(BaseView):
@expose('/')
def index(self):
return self.render('admin/user.html')
@expose('/user_manager')
def user_manager(self):
return self.render('admin/user.html')
class MyNews(BaseView):@expose('/', methods=['GET', 'POST'])    def index(self):form = NameForm()        return self.render('postnews.html', form=form)
#postnews.html在templates目录下
# 添加表管理、自定义视图
admin.add_view(HashView(User, db.session, name='用户'))
admin.add_view(HashView(Role, db.session, name='角色'))
admin.add_view(HashView(Env, db.session, name='环境配置'))
admin.add_view(UserView(name='user_manager'))
admin.add_view(MyNews(name=u'发表新闻'))
# category是可选的目录,且会自动添加上去admin.add_view(UserView(User, db.session, name='信息', category='用户管理'))
# 添加文件管理
admin.add_view(FileAdmin(config_path, '/file/', name='Config Files'))
用Flask-Login做身份验证
修改templates下的模板文件index.html,实现管理员登录带有CSRF 令牌的安全表单
{% extends 'admin/master.html' %}
{% block body %}
{{ super() }}
{% if current_user.is_authenticated %}
欢迎来到后台管理系统!
{% else %}
{{ form.hidden_tag() if form.hidden_tag }}
{% for f in form if f.type != 'CSRFTokenField' %}
{{ f.label }}
{{ f }}
{% if f.errors %}
{% for e in f.errors %}
{{ e }}
{% endfor %}
{% endif %}
{% endfor %}
登陆
{{ link | safe }}
{% endif %}
{% endblock body %}
定义登录表单
from wtforms import fields, validators class
LoginForm(FlaskForm):
login = fields.StringField(label='管理员账号', validators=[validators.required()])
password = fields.PasswordField(label='密码', validators=[validators.required()])
def validate_login(self, field): user = self.get_user() if user is None: raise validators.ValidationError('账号不存在')
#密码不能明文存储,用sha256_crypt加密if not sha256_crypt.verify(self.password.data, user.password): raise validators.ValidationError('密码错误')
def get_user(self):
#AdminUser是存储管理员用户密码的表return db.session.query(AdminUser).filter_by(login=self.login.data).first()
#安装flask-login
pip install flask-login
#初始化,调用init_login()函数
from flask_login import current_user, login_user, logout_user, LoginManager
def init_login():login_manager = LoginManager()login_manager.init_app(app)
@login_manager.user_loader
def load_user(user_id):return db.session.query(AdminUser).get(user_id)
#然后在需要管理员权限的才能看到的视图中添加代码
#决定身份验证可见def is_accessible(self):return current_user.is_authenticated
图片上传
#假设pics为需要上传图片的字段
import os.path as op
def thumb_name(filename):name, _ = op.splitext(filename)return secure_filename('%s-thumb.jpg' % name)
class MyForm(BaseForm):upload = ImageUploadField('File', thumbgen=prefix_name)
import os.path as op
form_extra_fields = {
'pics': upload.ImageUploadField(label='图片',base_path=file_path),
}
可以使用url_for附带一个.前缀来获得局部视图的URL:
from flask import url_for
class MyView(BaseView):@expose('/')def index(self)# Get URL for the test view methodurl = url_for('.test')return self.render('index.html', url=url)@expose('/test/')def test(self):return self.render('test.html')
建立只允许使用预定义值的名为status的列的表单:
from wtforms.fields import SelectField
class MyView(ModelView):form_overrides = dict(status=SelectField)form_args = dict(# Pass the choices to the `SelectField`status=dict(choices=[(0, 'waiting'), (1, 'in_progress'), (2, 'finished')]))
#添加redis控制台
from flask_admin.contrib import rediscli
admin.add_view(rediscli.RedisCli(Redis()))
可扩展的模板:对应继承 列表、创建、编辑页
admin/model/list.html
admin/model/create.html
admin/model/edit.html
例如:
{% extends 'admin/model/edit.html' %}
{% block body %}
MicroBlog Edit View
{{ super() }}
{% endblock %}
使视图使用模板
class MicroBlogModelView(ModelView):edit_template = 'microblog_edit.html'# create_template = 'microblog_create.html'# list_template = 'microblog_list.html'
如果使用基础模板,则在基础函数中添加
admin = Admin(app, base_template='microblog_master.html')
防止csrf***保护
#指定form_base_class 参数
from flask_admin.form import SecureForm
from flask_admin.contrib.sqla import ModelView
class CarAdmin(ModelView):form_base_class = SecureForm

转载于:https://blog.51cto.com/wenguonideshou/1955442

Flask-admin 使用总结相关推荐

  1. Flask 系列之 部署发布

    说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 通过 Windows 的 WSL,将我们的项目网站部署到 ...

  2. 长安“战疫“网络安全赛Writeup

    Web RCE_No_Para 无参RCE ?1=system('tac flag.php');&code=eval(current(current(get_defined_vars()))) ...

  3. flask-项目结构

    项目结构 [多文件 Flask 程序的基本结构] 4 个顶级文件夹: - app 目录包含Flask 程序: - migrations 文件夹包含数据库迁移脚本 - tests 目录包含测试代码: - ...

  4. python做流程管理平台_[译] Airflow: 一个工作流程管理平台

    Airflow: 一个工作流程管理平台 Airbnb 是一个快速增长的.数据启示型的公司.我们的数据团队和数据量都在快速地增长,同时我们所面临的挑战的复杂性也在同步增长.我们正在扩张的数据工程师.数据 ...

  5. php数组排序按照另一个数组排序,php,_一个数组根据另一个数组来排序,php - phpStudy...

    一个数组根据另一个数组来排序 $a = Array ( Array ( 'cid' => 1, 'cname' => '关于' ), Array ( 'cid' => 7, 'cna ...

  6. 基于flask+vue前后端分离 一款简单的旅游网站源码,带admin管理系统

    介绍 毕业设计-flask-vue前后端分离 一款简单的旅游网站,带admin管理系统 软件架构 软件架构说明 使用Python-flask 轻量级框架编写后端程序,前端采用Vue编写,后端接口都在蓝 ...

  7. flask 学习实战项目实例

    ScrapydWeb:用于 Scrapyd 集群管理的 web 应用 Tcloud云测平台后端服务 (flask 前后端分离) SpiderKeeper:A scalable admin ui for ...

  8. flask url构建_如何为生产构建构建Flask-RESTPlus Web服务

    flask url构建 by Greg Obinna 由格雷格·奥比纳(Greg Obinna) 如何为生产构建构建Flask-RESTPlus Web服务 (How to structure a F ...

  9. flask 使用 SQLAlchemy 的两种方式

    1. 使用 flask-SQLAlchemy 扩展 # flask-ext-sqlalchemy.pyfrom flask import Flask from flask.ext.sqlalchemy ...

  10. flask中使用Flask-SQLALCHEMY-------一个简单的例子

    2019独角兽企业重金招聘Python工程师标准>>> 在database.py文件中 from flask import Flask from flask.ext.sqlalche ...

最新文章

  1. python学习笔记(自定义库文件路径)
  2. android studio配置java_android studio配置Javah 和ndk-build
  3. payara 创建 集群_Payara Micro在Oracle应用容器云上
  4. 荣耀变鸿蒙系统,鸿蒙系统首批升级机型曝光!荣耀手机遗憾缺席,原因很简单...
  5. 深度理解java jvm,深度理解JVM
  6. ubuntu下vsftpd配置
  7. VirtualBox安装RedHat7
  8. 看拉扎维《模拟CMOS集成电路设计》的一些总结和思考(十三)——非线性与不匹配
  9. 遥感原理与应用-基本概念
  10. Python简单的音频处理
  11. 沅江市城市之星智慧桥机器人_城市之眼,国内十大最高城市摩天轮排名,你坐过哪个...
  12. 一种简单的图像白平衡计算方法
  13. failed to req API:/nacos/v1/ns/instance after all servers([192.168.43.148:8848]) tried: ErrCode:503,
  14. ST-Link该如何升级?
  15. 爬虫基础:HTTP基本原理
  16. 【英语】美式元音 总结
  17. word中在指定位置插入图片
  18. 基于视词袋模型的场景识别
  19. 网页点名器(移动端、pc端)
  20. 神经网络之反向传播算法(均方根反向传播算法RMSProp)

热门文章

  1. 与微信、APP正面刚?三大运营商联合发布5G消息白皮书
  2. 语音公司集体杀入AI芯片 2019场景落地战打响!
  3. 《Science》评选2017年十大科学突破,看看有哪些吧!
  4. 2018年人工智能将赋能所有行业,未来市场将超过400亿美元
  5. Java 程序员一次有趣的面试 | 每日趣闻
  6. 月饼哪家强?Python 告诉你
  7. 程序员花名大 PK | 每日趣闻
  8. 厉害!从电影花瓶到 Wi-Fi 之母,这才是乘风破浪的姐姐!
  9. @程序员,什么键盘最耐用?| 每日趣闻
  10. Python 工程管理及 virtualenv 的迁移