博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用 Flask 来写个轻博客 (31) — 使用 Flask-Admin 实现 FileSystem 管理
阅读量:6874 次
发布时间:2019-06-26

本文共 3150 字,大约阅读时间需要 10 分钟。

Blog 项目源码:

目录

前文列表

扩展阅读

编写 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_userfrom 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 类型对象, 至于权限的设置模式由我们自己定义.

转载于:https://www.cnblogs.com/jmilkfan-fanguiju/p/10589847.html

你可能感兴趣的文章
[转载] 教你如何迅速秒杀掉:99%的海量数据处理面试题
查看>>
checkbox复选框的一些深入研究与理解
查看>>
简单入门Buffer
查看>>
【HDU】6110 路径交(2017百度之星) 线段树+RMQ-LCA+树链的交
查看>>
自定义Attribute 服务端校验 客户端校验
查看>>
Java锁系列|Java锁体系(一)
查看>>
SDN第四次作业
查看>>
HTML5之本地存储SessionStorage
查看>>
c语言学习之基础知识点介绍(三):scanf函数
查看>>
python lambda
查看>>
ubuntu配置caffe的python接口pycaffe
查看>>
C#--笔记
查看>>
[题集]一些有趣的问题
查看>>
[HNOI2010]城市建设
查看>>
系统设计 样题
查看>>
Paint House II
查看>>
[转]进程与线程的一个简单解释
查看>>
测试评审清单
查看>>
算法笔记--匈牙利算法
查看>>
字节流数据的写出(输出)和读取(输入)
查看>>