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更新---------------------------------------- ...
随机推荐
- myeclipse 开发环境下,提示 String cannot be resolved to a type
从SVN上下载项目,所有代码都有下来,在本地编译,java类总是报出n多红叉,惨不忍睹,String cannot be resolved to a type都出来了,以为是jar包未被加载,于是pr ...
- JavaScript随笔目录
DOM DOM节点 浏览器环境 遍历节点 DOM的基本属性 Attribute和自定义Property 在DOM中搜索元素 对文档进行操作
- php常用string函数
http://www.w3school.com.cn/php/php_ref_string.asp1.addcslashes() 返回在指定的字符前添加反斜杠的字符串2.addslashes() 返回 ...
- Vuejs——(2)Vue生命周期,数据,手动挂载,指令,过滤器
(八)传入的数据绑定 先创建一个对象(假如是obj),然后将他传入Vue实例中,作为data属性的值,那么 ①obj的值的变化,将影响Vue实例中的值的变化: ②相反一样: ③可以在Vue实例外面操纵 ...
- 数据终端设备与无线通信模块之间串行通信链路复用协议(TS27.010)在嵌入式系统上的开发【转】
转自:http://blog.csdn.net/hellolwl/article/details/6164449 目录(?)[-] 协议介绍 模块协议介绍 1 命令包格式 2 ...
- LR中线程和进程的区别
LoadRunner中的进程与线程 1.进程与线程的区别: 进程和线程的区别是什么?进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性.进程和线程的区别 ...
- mybatis框架下解决数据库中表的列的字段名和实体类属性不相同的问题
导包.... 实体类中的属性,getter,setter,tostring,构造等方法就不写了 private int id; private String orderNo; private floa ...
- JAVA应用程序占用CPU、内存过高分析过程
1.查看cpu占有率 top -P 2.查看进程cpu占用率 ps -mp 3749 -o THREAD,tid,time|sort -rn|head -n 20 查看占用cpu高,且占用时间长的线程 ...
- [原]在AMD机器上使用android studio
amd机器上使用android studio进行调试.因为amd的cpu不支持IntelVT,所以可能会有如下错误提示 我们有几个选择: 1. 使用真机调试 2. 配合genymotion 3. ...
- 微信小程序实例
看到小程序,那么火,自己也想动手写一个.但是没有很好的api接口.有一天看到一个开发安卓的朋友,写了一个干货集中营的小程序.就搜了一下.看到api是免费开放的.于是自己也动手写了一个. 具体的微信小程 ...