17,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)
通过判断当前用户登录状态和当前登录的用户名进行权限设置
原文地址:https://www.cnblogs.com/feifeifeisir/p/11497461.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android流式布局FlowLayout详解
- Linux 专题
- Go语言实现UDP通信
- Android多渠道打包的方法步骤
- Android编程实现压缩图片并加载显示的方法
- Android串口通信封装之OkUSB的示例代码
- Android 中Activity 之间传递参数
- Android开发简单实现摇动动画的方法
- Android 中menu同时显示图标和文字的实现
- android基于SwipeRefreshLayout实现类QQ的侧滑删除
- PopupWindow自定义位置显示的实现代码
- Bootstrap 下拉菜单.dropdown的具体使用方法
- Android访问assets本地json文件的方法
- Android延时操作的三种方法
- 5步教你快速写一个android Router路由框架