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 = True
    edit_modal = True
    can_export = True
    column_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 method
        url = 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
时间: 2024-08-29 23:48:51

Flask-admin 使用总结的相关文章

flask-admin章节四:flask session的使用

1. 关于session flask session可能很多人根本都没有使用过,倒是cookie大家可能使用得比较多.flask cookie使用起来比较简单,就两个函数,读取和设置. 具体使用方式如下: 读取cookie from flask import request @app.route('/') def index(): username = request.cookies.get('username') # 使用 cookies.get(key) 来代替 cookies[key] ,

浅谈 Flask 框架

一.框架对比 Django Flask Admin —— Model 原生无 Model 原生无 Form 原生无 Session 有 —— 颠覆认知操作 Django —— 教科书式框架 优势:组件全,功能全,教科书 劣势:占用资源,创建复杂度高 Flask —— 以简单为基准开发,一切从简,能省则省 优势:轻,块 劣势:先天不足,第三方组件稳定性较差 二.Flask入门 下载安装 下载:pip install Flask 注意:不要使用工具中的插件创建 Flask 项目 三行代码启动Flas

flask-admin章节二:wtforms的使用以及在数据库场景中使用QuerySelectField代替SelectField

概述 flask admin可以支持自定义视图,对于涉及到比较复杂的视图可以选择继承flask_admin.BaseView来定义自己期待的结构. 自定义的视图的每个函数可以使用flask_admin.expose 语法糖来装饰,从而可以定义自己期待接收的HTTP方法和对外的URL. flask admin的良好封装,使得自定义视图非常的方便. 自定义视图中少不了涉及各种表单操作,对于不是很习惯写前端的朋友来说肯定压力比较大.不过,懒人自有懒的办法,可以选择 wtforms package提供的

flask-admin章节五:wtforms FormField超级炫酷使用

1. 概述 查看wtforms代码树fields目录的core.py,会发现在文件开头有这样的语句: __all__ = ( 'BooleanField', 'DecimalField', 'DateField', 'DateTimeField', 'FieldList', 'FloatField', 'FormField', 'IntegerField', 'RadioField', 'SelectField', 'SelectMultipleField', 'StringField', )

光荣之路培训体系

专业课程--Web自动化 课程 课程 大纲内容 课时 (天) 测试基础课程 软件测试的基础理论 互联网测试开发岗位要求解析 1   敏捷软件开发流程及常见测试工具.平台 功能测试 常用黑盒测试 1   白盒测试   功能测试框架   Bug 预防   探索式测试   如何沟通   如何组织大型软件项目的测试工作 系统基础课程 linux系统命令及常见工具使用 Linux文件系统类型和特点 5 Linux系统目录结构和磁盘规划 基本安装流程以及安装过程中注意事项 软件包介绍 Linux启动流程简介

flask-admin章节一:使用chartkick画报表

一般中小型WEB整体来看逻辑比较简单些,一般都是基于数据库的增删改查.不过通过数据库查询到的记录直接展示给用户不是很直观,大家其实蛮期待有一个报表 直接展示他们期待的内容. 这块就涉及到数据的提取和展示,数据的提取就不需要过多涉及了,就是一些不同的SQL查询. 数据的展示,就需要有各种开源javascript库的支持.毕竟自己去写一套图表展示javascript库是不太现实的,需要投入太多的经历,而且开源里也有很多实现. 开源实现报表功能的javascript库还是蛮多的,不过我比较推荐使用ch

Flask中多APP应用以及admin后台系统

一.多APP from werkzeug.wsgi import DispatcherMiddleware from werkzeug.serving import run_simple from flask import Flask, current_app app1 = Flask('app01') app2 = Flask('app02') @app1.route('/index') def index(): return "app01" @app2.route('/index2

【Flask项目】通过命令行新增admin用户

通过命令行执行 创建superuser  账户 @manager.option('-n', '-name', dest="name") @manager.option('-p', '-password', dest="password") def createsuperuser(name, password): if not all([name, password]): print("参数不足") user = User() user.nick_

Python:hashlib加密模块,flask模块写登录接口

hashlib模块 主要用于加密相关的操作,(比如说加密字符串)在python3的版本里,代替了md5和sha模块,主要提供 sha1, sha224, sha256, sha384, sha512 ,md5 这些加密方式 import  hashlib m = hashlib.md5()   #用md5加密的方式(md5加密后无法解密),创建一个md5的对象 m.update(b"Hello")  #b代表二进制字节bytes,把字符串hello转成字节,然后加密:用b给一个变量转换

flask蓝图的使用

首先,我对蓝图的理解相对通俗,就是觉得蓝图对于视图方法模块化.大项目协同开发过程中的一个很好的工具. 1.下图是我们通常情况下使用的项目组织结构 看一下视图方法: #views.py 1 from app import app 2 3 4 @app.route('/user/index') 5 def index(): 6 return 'user_index' 7 8 @app.route('/user/show') 9 def show(): 10 return 'user_show' 11