博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用 Flask 来写个轻博客 (30) — 使用 Flask-Admin 增强文章管理功能
阅读量:5890 次
发布时间:2019-06-19

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

目录

前文列表

扩展阅读

实现文章管理功能

该功能是在 ModelView 提供 CRUD 管理的基础上实现, 但是仍然存在一个问题, 就是 Flask-Admin 默认使用的文本编辑字段为 textarea, 这无法满足博客文章的样式需求. 所以我们这次来看看怎样替换一个默认的字段类型.

  • 创建一个新的字段类型
    vim jmilkfansblog/forms.py
from wtforms import (    widgets,    StringField,    TextField,    TextAreaField,    PasswordField,    BooleanField,    ValidationError)class CKTextAreaField(TextAreaField):    """Create a new Field type."""    # Add a new widget `CKTextAreaField` inherit from TextAreaField.    widget = CKTextAreaWidget()class CKTextAreaWidget(widgets.TextArea):    """CKeditor form for Flask-Admin."""    def __call__(self, field, **kwargs):        """Define callable type(class)."""        # Add a new class property ckeditor: ``        kwargs.setdefault('class_', 'ckeditor')        return super(CKTextAreaWidget, self).__call__(field, **kwargs)

NOTE 1: 新建的 CKTextAreaField 字段类型继承了 TextAreaField, 唯一的区别在于, CKTextAreaField 增加了一个 widget 的小部件, widget 的意义在于为该字段的 HTML 标签增加一个 class EG. <input class=ckedior ...>.

NOTE 2: widget 是由 class CKTestAreaWidget 返回的, 该类作为的唯一一件事情就是将 HTML 标签中的 class 的值设定为 ckedior, EG. <textarea name="editor" id="editor" class="ckeditor" rows="10" cols="80"> 这样的话, Ckeditor 就会将原默认的 TextArea(editor) 给替换掉.

  • 定义一个 PostView 类
    vim jmilkfansblog/controllers/admin.py
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'

NOTE 1: form_overrides 指定使用新的字段类型 CKTextAreaField 替换原来的 TextAreaField.

NOTE 2: column_searchable_list 指定一个搜索框, 和搜索的范围为 post.text/post.title

NOTE 3: column_filters 指定一个过滤器, 筛选更加精确的值

NOTE 4: create_template/edit_template 指定自定义模板文件

  • 创建自定义模板
    vim jmilkfansblog/templates/admin/post_edit.html
{% extends 'admin/model/edit.html' %}{% block tail %}{
{ super() }}{% endblock %}

NOTE 1: 该自定义模板继承了 admin/model/edit.html, 但却替换了

{% block tail %} 为一个 CKEditor.

实现效果

  • 文章列表

    这里写图片描述

  • 创建/编辑文章

    这里写图片描述

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

你可能感兴趣的文章
TestNG 六 测试结果
查看>>
用Fiddler或Charles进行mock数据搭建测试环境
查看>>
使用REST-Assured对API接口进行自动化测试
查看>>
GitHub发布史上最大更新,年度报告出炉!
查看>>
王潮歌跨界指导HUAWEI P20系列发布会 颠覆传统 眼界大开!
查看>>
王高飞:微博已收购一直播 明年一季度重点是功能与流量打通
查看>>
趣头条发行区间7至9美元 预计9月14日美国上市
查看>>
新北市长侯友宜:两岸交流应从隔壁最亲近的人开始
查看>>
全面屏的Nokia X即将上线,不到2000元的信仰你要充值吗?
查看>>
利用clear清除浮动的一些问题
查看>>
区块链杂谈-测链
查看>>
一篇文章带拿下盒模型BFC渲染机制
查看>>
区块链密码学
查看>>
使用webpack打包多页jquery项目
查看>>
【跃迁之路】【672天】程序员高效学习方法论探索系列(实验阶段429-2018.12.17)...
查看>>
JS处理base64编码
查看>>
符合ARIA的radiogroup
查看>>
【C】 47_递归函数分析
查看>>
利用Redis实现分布式锁
查看>>
JSON生成Form表单(四)
查看>>