flaskadmin调用html文件,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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值