Flask-admin 使用总结
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 使用总结相关推荐
- Flask 系列之 部署发布
说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 通过 Windows 的 WSL,将我们的项目网站部署到 ...
- 长安“战疫“网络安全赛Writeup
Web RCE_No_Para 无参RCE ?1=system('tac flag.php');&code=eval(current(current(get_defined_vars()))) ...
- flask-项目结构
项目结构 [多文件 Flask 程序的基本结构] 4 个顶级文件夹: - app 目录包含Flask 程序: - migrations 文件夹包含数据库迁移脚本 - tests 目录包含测试代码: - ...
- python做流程管理平台_[译] Airflow: 一个工作流程管理平台
Airflow: 一个工作流程管理平台 Airbnb 是一个快速增长的.数据启示型的公司.我们的数据团队和数据量都在快速地增长,同时我们所面临的挑战的复杂性也在同步增长.我们正在扩张的数据工程师.数据 ...
- php数组排序按照另一个数组排序,php,_一个数组根据另一个数组来排序,php - phpStudy...
一个数组根据另一个数组来排序 $a = Array ( Array ( 'cid' => 1, 'cname' => '关于' ), Array ( 'cid' => 7, 'cna ...
- 基于flask+vue前后端分离 一款简单的旅游网站源码,带admin管理系统
介绍 毕业设计-flask-vue前后端分离 一款简单的旅游网站,带admin管理系统 软件架构 软件架构说明 使用Python-flask 轻量级框架编写后端程序,前端采用Vue编写,后端接口都在蓝 ...
- flask 学习实战项目实例
ScrapydWeb:用于 Scrapyd 集群管理的 web 应用 Tcloud云测平台后端服务 (flask 前后端分离) SpiderKeeper:A scalable admin ui for ...
- flask url构建_如何为生产构建构建Flask-RESTPlus Web服务
flask url构建 by Greg Obinna 由格雷格·奥比纳(Greg Obinna) 如何为生产构建构建Flask-RESTPlus Web服务 (How to structure a F ...
- flask 使用 SQLAlchemy 的两种方式
1. 使用 flask-SQLAlchemy 扩展 # flask-ext-sqlalchemy.pyfrom flask import Flask from flask.ext.sqlalchemy ...
- flask中使用Flask-SQLALCHEMY-------一个简单的例子
2019独角兽企业重金招聘Python工程师标准>>> 在database.py文件中 from flask import Flask from flask.ext.sqlalche ...
最新文章
- python学习笔记(自定义库文件路径)
- android studio配置java_android studio配置Javah 和ndk-build
- payara 创建 集群_Payara Micro在Oracle应用容器云上
- 荣耀变鸿蒙系统,鸿蒙系统首批升级机型曝光!荣耀手机遗憾缺席,原因很简单...
- 深度理解java jvm,深度理解JVM
- ubuntu下vsftpd配置
- VirtualBox安装RedHat7
- 看拉扎维《模拟CMOS集成电路设计》的一些总结和思考(十三)——非线性与不匹配
- 遥感原理与应用-基本概念
- Python简单的音频处理
- 沅江市城市之星智慧桥机器人_城市之眼,国内十大最高城市摩天轮排名,你坐过哪个...
- 一种简单的图像白平衡计算方法
- failed to req API:/nacos/v1/ns/instance after all servers([192.168.43.148:8848]) tried: ErrCode:503,
- ST-Link该如何升级?
- 爬虫基础:HTTP基本原理
- 【英语】美式元音 总结
- word中在指定位置插入图片
- 基于视词袋模型的场景识别
- 网页点名器(移动端、pc端)
- 神经网络之反向传播算法(均方根反向传播算法RMSProp)