Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog

目录

前文列表

用 Flask 来写个轻博客 (1) — 创建项目

用 Flask 来写个轻博客 (2) — Hello World!

用 Flask 来写个轻博客 (3) — (M)VC_连接 MySQL 和 SQLAlchemy

用 Flask 来写个轻博客 (4) — (M)VC_创建数据模型和表

用 Flask 来写个轻博客 (5) — (M)VC_SQLAlchemy 的 CRUD 详解

用 Flask 来写个轻博客 (6) — (M)VC_models 的关系(one to many)

用 Flask 来写个轻博客 (7) — (M)VC_models 的关系(many to many)

用 Flask 来写个轻博客 (8) — (M)VC_Alembic 管理数据库结构的升级和降级

用 Flask 来写个轻博客 (9) — M(V)C_Jinja 语法基础快速概览

用 Flask 来写个轻博客 (10) — M(V)C_Jinja 常用过滤器与 Flask 特殊变量及方法

用 Flask 来写个轻博客 (11) — M(V)C_创建视图函数

用 Flask 来写个轻博客 (12) — M(V)C_编写和继承 Jinja 模板

用 Flask 来写个轻博客 (13) — M(V)C_WTForms 服务端表单检验

用 Flask 来写个轻博客 (14) — M(V)C_实现项目首页的模板

用 Flask 来写个轻博客 (15) — M(V)C_实现博文页面评论表单

用 Flask 来写个轻博客 (16) — MV(C)_Flask Blueprint 蓝图

用 Flask 来写个轻博客 (17) — MV(C)_应用蓝图来重构项目

用 Flask 来写个轻博客 (18) — 使用工厂模式来生成应用对象

用 Flask 来写个轻博客 (19) — 以 Bcrypt 密文存储账户信息与实现用户登陆表单

用 Flask 来写个轻博客 (20) — 实现注册表单与应用 reCAPTCHA 来实现验证码

用 Flask 来写个轻博客 (21) — 结合 reCAPTCHA 验证码实现用户注册与登录

用 Flask 来写个轻博客 (22) — 实现博客文章的添加和编辑页面

用 Flask 来写个轻博客 (23) — 应用 OAuth 来实现 Facebook 第三方登录

用 Flask 来写个轻博客 (24) — 使用 Flask-Login 来保护应用安全

用 Flask 来写个轻博客 (25) — 使用 Flask-Principal 实现角色权限功能

用 Flask 来写个轻博客 (26) — 使用 Flask-Celery-Helper 实现异步任务

用 Flask 来写个轻博客 (27) — 使用 Flask-Cache 实现网页缓存加速

用 Flask 来写个轻博客 (29) — 使用 Flask-Admin 实现后台管理 SQLAlchemy

用 Flask 来写个轻博客 (30) — 使用 Flask-Admin 增强文章管理功能

扩展阅读

[译]Flask-Admin中文入门教程

Flask-admin使用经验技巧总结

编写 FileSystem Admin 页面

所谓的 FileSystem Admin 功能, 就是哪呢钢构通过后台管理页面查看并修改 blog 项目中, 或自定义的文件目录内容. 使用 Flask-Admin 最后一种视图类型 FileAdmin 来实现.

从效果图中可以看见, 其中包括了 上传/创建目录/删除/重命名 等功能.

  • 继承 FileAdmin 视图类

    vim jmilkfansblog/controllers/admin.py

    最简单的实现方法, 只需要继承了 FileAdmin 类, 并且将子视图类添加到 flask_admin 对象中就可以了.
class CustomFileAdmin(FileAdmin):
"""File System admin."""
pass
  • 添加到 flask_admin 对象

    该对象在之前的博文中已经定义过了

    vim jmilkfansblog/__init__.py
from jmilkfansblog/controllers import admin

    #### Init the Flask-Admin via app object
flask_admin.init_app(app)
...
# Register and define path of File System for Flask-Admin
flask_admin.add_view(
admin.CustomFileAdmin(
os.path.join(os.path.dirname(__file__), 'static'),
'/static',
name='Static Files'))

NOTE: CustomFileAdmin 继承了 FileAdmin 的构造器, os.path.join(os.path.dirname(__file__), 'static') 的值为 你需要管理的文件目录在系统中的全路径. name 参数指定了在管理页面显示 Label 的名字.

Flask-Admin 的权限安全

一般的我们都不希望网站后台被匿名访问, 权限的设置是最基本的要求. 我们应该之前使用了 Flask-Login 来实现整个 blog 项目的权限功能模块, 所以我们直接引入到 Flask-Admin 就可以了.

  • 设置 CustomView 的限制

    vim jmilkfansblog/controllers/admin.py
from flask.ext.login import login_required, current_user
from jmilkfansblog.extensions import admin_permission ...
class CustomView(BaseView):
"""View function of Flask-Admin for Custom page.""" @expose('/')
@login_required
@admin_permission.require(http_exception=403)
def index(self):
return self.render('admin/custom.html') @expose('/second_page')
@login_required
@admin_permission.require(http_exception=403)
def second_page(self):
return self.render('admin/second_page.html')

NOTE: 路由的访问限制我们直接使用 Flask-Login 提供的装饰器 @login-required 和之前定义好的 RoleNeed 对象来实现. 现在, 只有管理员用户处于登录状态时, 才能访问这个 URL .

  • 限制 ModelAdmin 和 FileAdmin
class CustomModelView(ModelView):
"""View function of Flask-Admin for Models page.""" def is_accessible(self):
"""Setup the access permission for CustomModelView.""" # callable function `User.is_authenticated()`.
# FIXME(JMilkFan): Using function is_authenticated()
return current_user.is_authenticated() and\
admin_permission.can() class PostView(CustomModelView):
"""View function of Flask-Admin for Post create/edit Page includedin Models page""" # Using the CKTextAreaField to replace the Field name is `test`
form_overrides = dict(text=CKTextAreaField) # Using Search box
column_searchable_list = ('text', 'title') # Using Add Filter box
column_filters = ('publish_date',) # Custom the template for PostView
# Using js Editor of CKeditor
create_template = 'admin/post_edit.html'
edit_template = 'admin/post_edit.html' class CustomFileAdmin(FileAdmin):
"""File System admin.""" def is_accessible(self):
"""Setup the access permission for CustomFileAdmin.""" # callable function `User.is_authenticated()`.
return current_user.is_authenticated() and\
admin_permission.can()

NOTE 1: 设置 ModelAdmin 和 FileAdmin 子类的访问权限, 需要为它们定义一个 is_accessible() function, 并且返回的值必须为 Bool 类型对象, 至于权限的设置模式由我们自己定义.

用 Flask 来写个轻博客 (31) — 使用 Flask-Admin 实现 FileSystem 管理的更多相关文章

  1. 用 Flask 来写个轻博客

    用 Flask 来写个轻博客 用 Flask 来写个轻博客 (1) — 创建项目 用 Flask 来写个轻博客 (2) — Hello World! 用 Flask 来写个轻博客 (3) — (M)V ...

  2. 用 Flask 来写个轻博客 (37) — 在 Github 上为第一阶段的版本打 Tag

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 第一阶段结语 打 Tag 前文列表 用 Flask 来写个轻博客 (1 ...

  3. 用 Flask 来写个轻博客 (36) — 使用 Flask-RESTful 来构建 RESTful API 之五

    目录 目录 前文列表 PUT 请求 DELETE 请求 测试 对一条已经存在的 posts 记录进行 update 操作 删除一条记录 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 ...

  4. 用 Flask 来写个轻博客 (35) — 使用 Flask-RESTful 来构建 RESTful API 之四

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 POST 请求 身份认证 测试 前文列表 用 Flask 来写个轻博客 ...

  5. 用 Flask 来写个轻博客 (34) — 使用 Flask-RESTful 来构建 RESTful API 之三

    目录 目录 前文列表 应用请求中的参数实现 API 分页 测试 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写个轻博客 (2) - Hello World! 用 F ...

  6. 用 Flask 来写个轻博客 (33) — 使用 Flask-RESTful 来构建 RESTful API 之二

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 构建 RESTful Flask API 定义资源路由 格式 ...

  7. 用 Flask 来写个轻博客 (32) — 使用 Flask-RESTful 来构建 RESTful API 之一

    目录 目录 前文列表 扩展阅读 RESTful API REST 原则 无状态原则 面向资源 RESTful API 的优势 REST 约束 前文列表 用 Flask 来写个轻博客 (1) - 创建项 ...

  8. 用 Flask 来写个轻博客 (30) — 使用 Flask-Admin 增强文章管理功能

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 实现文章管理功能 实现效果 前文列表 用 Flask 来写个 ...

  9. 用 Flask 来写个轻博客 (29) — 使用 Flask-Admin 实现后台管理 SQLAlchemy

    目录 目录 前文列表 扩展阅读 Flask-Admin BaseView 基础管理页面 ModelView 实现效果 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写 ...

随机推荐

  1. redis数据的备份与恢复

    redis数据的备份与恢复 持久化分为两种方式:RDB和AOF 1.1 RDB模式 RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的所有数据进 ...

  2. 自定义SAP搜索帮助记录-代码实现

    一般来说,标准的字段都可以用SE11来创建搜索帮助,但是有时候这里的满足不了需求或者,相同的数据元素需要用不同的搜索帮助类型,就需要用别的方式实现 1.用函数:F4IF_INT_TABLE_VALUE ...

  3. 05 - Jmeter连接多台电脑做压力测试

     在使用Jmeter进行接口的性能测试时, 由于Jmeter是JAVA应用, 对于CPU的内存消耗比较大, 所以, 当需要模拟数以万计的的并发用户时, 使用单台机器模拟所有用户并发就会有些力不从心了, ...

  4. Macaca的Python的api整理

    整理了下Macaca的API,做成思维脑图,方便阅览. WebDriver 安装 pip install wd git clone https://github.com/macacajs/wd.py. ...

  5. Windows禅道环境部署

    1.     禅道下载地址,下载解压 http://www.zentao.net/download/80081.html 一键安装包根据本机系统做相应版本下载 2.     解压完打开文件夹xampp ...

  6. df认识

    import pandas as pd #自己创建一个df df = pd.DataFrame({ ,,], 'col2':["zs",'li','zl'], 'col3':[3. ...

  7. SpringCloud异常

    Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could ...

  8. Angular2+之模态框-使用ngx-bootstrap包中的模态框组件实现

    模态框是项目中经常会用到的一个公共功能,通常会被用左提示框或者扩展选项框. 下面,我用一个小例子来简单展示实现模态框功能的过程: 1.为项目加包: ng add ngx-bootstrap 2.在xx ...

  9. [fw]Linux下tty/pty/pts/ptmx详解

    基本概念: 1> tty(终端设备的统称):tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东 ...

  10. vue简单的v-for - - 路由跳转

    前几天写了一个特特特简单的小图片页面,主要用到的就是v-for遍历以及路由跳转到详情页.路由跳转需要在router文件夹下index.js引入. 导航栏(element ui导航栏为模板): < ...