Flask-admin使用经验技巧总结
笔者是看狗书入门的flask,狗书上对于flask-admin这个扩展并没有进行讲解,最近因为项目需要,学习使用flask-admin,瞬间体会到了flask开发的快速、扩展的强大
Flask-admin 使用经验技巧总结
from flask_admin import Admin,BaseView,expose,AdminIndexView
from flask_admin.contrib.sqla import ModelView
先把最终效果图放上
一、模型视图
1.管理新闻、管理公告、管理文件、管理展示栏是四个与数据库表同步的模型视图,如果你想要在后台管理程序中数据库中的表在初始化admin后仅需一句代码
admin = Admin(app)
admin.add_view(ModelView(User, db.session))
2.但是有时候flask-admin的默认设置并不能满足你的条件,如果我们在后台只打算让表中固定的几列数据显示,这时候我们就不能直接像上面那样直接ModelView,我们需自定义一个类并继承ModelView,并重写一些代码,把想要显示出来的列名写在column_list中
class MyV1(ModelView): column_list = ('id', 'title','timestamp','count','content')
def __init__(self, session, **kwargs):
super(MyV1, self).__init__(News, session, **kwargs)
然后在程序中再加入代码如下,然后就OK了
admin.add_view(MyV1(db.session,name = u'管理新闻'))
3.如果我们使用flask做网站是给自己使用,后台和数据库中同步的列名是英文显示没有多大影响,自己写的数据库难道还不知道什么意思,但是当我们是写给非技术人员使用时,他们可能不能理解每个列名是什么意思,所以现在我们就需要将列名中文化,也是需要重写column_labels
class MyV1(ModelView): column_labels = {
'id':u'序号',
'title' : u'新闻标题',
'timestamp':u'发布时间',
'count':u'浏览次数',
'content':u'新闻内容'
}
column_list = ('id', 'title','timestamp','count','content')
def __init__(self, session, **kwargs):
super(MyV1, self).__init__(News, session, **kwargs)
4.有时候当同步数据库表成功后,扩展会有一个默认新建数据插入数据库表中的功能,但是我们有时候发表博客、新闻这些需要排版的文章但是默认的新建数据不支持这个功能怎么办,我们可以把默认创建功能先关掉。
class MyV1(ModelView):
can_create = False column_labels = {
'id':u'序号',
'title' : u'新闻标题',
'timestamp':u'发布时间',
'count':u'浏览次数',
'content':u'新闻内容'
}
column_list = ('id', 'title','timestamp','count','content')
def __init__(self, session, **kwargs):
super(MyV1, self).__init__(News, session, **kwargs)
二、创建视图
上面我们说到讲默认创建功能关掉,但是我们怎么新建数据呢,我们可以自己写一个视图,关联自己的模板,再在模板中集成富文本。
class MyNews(BaseView):
@expose('/', methods=['GET', 'POST'])
def index(self):
form = NameForm()
return self.render('donews.html', form=form)
然后再程序中加入代码
admin.add_view(MyNews(name=u'发表新闻'))
三、对主页面的修改
flask-admin默认主页面标题是Home,而且界面一片空白,由于各种需要,我们需要对这些进行更改,参考以下代码
admin = Admin(
app,
index_view=AdminIndexView(
name='导航栏',
template='welcome.html',
url='/admin'
)
)
将标题修改为导航栏,并将主页设置为welcome.html,进入后台对应的url也可以修改
四、权限设置
一般后台并不是对所有用户开放的,所有牵扯到了管理员权限,这一块我是依靠flask-login这个扩展实现的,关于flask-login会再写一遍进行总结,新加代码如下
class MyV1(ModelView):
def is_accessible(self):
if current_user.is_authenticated and current_user.username == "admin":
return True
return False
can_create = False column_labels = {
'id':u'序号',
'title' : u'新闻标题',
'timestamp':u'发布时间',
'count':u'浏览次数',
'content':u'新闻内容'
}
column_list = ('id', 'title','timestamp','count','content')
def __init__(self, session, **kwargs):
super(MyV1, self).__init__(News, session, **kwargs)
class MyNews(BaseView):
def is_accessible(self):
if current_user.is_authenticated and current_user.username == "admin":
return True
return False
@expose('/', methods=['GET', 'POST'])
def index(self):
form = NameForm()
return self.render('donews.html', form=form)
通过判断当前用户登录状态和当前登录的用户名进行权限设置
Flask-admin使用经验技巧总结的更多相关文章
- flask admin学习记录
flask admin是flask框架中一个非常好用的后台管理框架,但是由于文档内容太少,经常遇到问题无法解决,这里记录一下 一简单的使用 from flask import Flask from f ...
- Flask admin Flask login 整合模板
项目地址: https://github.com/WES6/supflask Flask admin 官方文档: https://flask-admin.readthedocs.io/en/lates ...
- [Evernote]印象笔记使用经验技巧
一 软件使用 现在使用Windows客户端的印象笔记 + iPhone移动端印象笔记 + chrome浏览器剪藏插件. 在试用了很多云笔记后,还是选择了印象笔记,并且有许多的 ...
- 用 Flask 来写个轻博客 (31) — 使用 Flask-Admin 实现 FileSystem 管理
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 编写 FileSystem Admin 页面 Flask-A ...
- Django admin美化插件suit应用[原创]
前言 由于比较懒,自己弄了一个用户验证,没有自己写后台,用了django自带的user认证,并通过admin直接进行管理,但默认的admin并不漂亮,于是使用了这个django-suit插件,效果对比 ...
- flask-admin章节四:flask session的使用
1. 关于session flask session可能很多人根本都没有使用过,倒是cookie大家可能使用得比较多.flask cookie使用起来比较简单,就两个函数,读取和设置. 具体使用方式如 ...
- Django Admin 简单部署上线
前言 打算为公司弄一个管理公用密码的平台,由于比较懒,就选择使用Django admin,默认的admin并不漂亮,于是我使用了这个django-suit插件来美化 如图: 是不是比原来的漂亮多了. ...
- flask 扩展之 -- flask-mail
Flask-Mail 封装了 python 标准库 smtplib 包, 以便于更好的与 Flask 集成. 一. 安装 $ pip install flask-mail 二. 配置 及 初始化 Fl ...
- [flask/python/web] 解析flask web开发(Miguel著)一书第11章主页不显示博文表单的问题
---------------------------------------------以下内容2017.7.14更新---------------------------------------- ...
随机推荐
- crm软件如何实现企业智能化管理?
互联网技术的发展,让企业越来越重视客户的感知体验,企业只有适应并接受再逐步转向智能化发展模式,才能在市场竞争中取胜不被淘汰.选择一款适宜企业自身发展的CRM系统,根据自身的具体情况随需而定,企业才能更 ...
- iOS_SourceTree忽略CocoaPods文件
原文作者:iOS_MingXing 原文地址(CSDN):http://blog.csdn.net/ios_mingxing/article/details/51487344 (有更改) 忽略文件内容 ...
- angular.extend()和 angular.copy()的区别
1.angular.copy angular.copy(source, [destination]); // source: copy的对象. 可以使任意类型, 包括null和undefined. ...
- JavaScript中正则表达式test()、exec()、match() 方法
转自http://www.cnblogs.com/jane-y/articles/5183859.html 1.test test 返回 Boolean,查找对应的字符串中是否存在模式.var str ...
- NSDate和NSDateFormatter 相关应用代码示例
此方法用来计算当前时间与目标时间的先后顺序: -(NSDate *)calculateTimeWithCurrentTime:(NSDate *)currentDate{ //将当前时间转为本地时区 ...
- Codeforces Round #363 (Div. 2)A-D
699A 题意:在一根数轴上有n个东西以相同的速率1m/s在运动,给出他们的坐标以及运动方向,问最快发生的碰撞在什么时候 思路:遍历一遍坐标,看那两个相邻的可能相撞,更新ans #include< ...
- p12(PKCS12)和jks互相转换
p12 -> jks keytool -importkeystore -srckeystore keystore.p12 -srcstoretype PKCS12 -deststoretype ...
- javascript 变量提前
1. 未声明变量时,结果是我们预期的结果,报错这个变量没有定义. (function() { // 报错:variable is not defined console.log(variable); ...
- Radmin Center 1.54 测试版
软件简介:radmin center 用于集中管理安装了 radmin server 的服务器,支持一键远程管理,数据全部本地存储,关键数据使用RC4变形加密.同时保留了radmin的高安全性和高易用 ...
- Using FreeMarker templates (FTL)- Tutorial
Lars Vogel, (c) 2012, 2016 vogella GmbHVersion 1.4,06.10.2016 Table of Contents 1. Introduction to F ...