Flask-admin

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

时间: 2024-11-04 16:49:12

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