Flask-Admin 是一个后台管理扩展,使用它能够快速构建后台管理系统(若是你不须要大量自定义修改的话)。好比你编写了一个博客,为程序建立了存储博客文章、标签、分类的数据库模型类,通过一些简单的设置,Flask-Admin 就能够自动为你生成一个管理后台,能够删除、建立和编辑文章、标签、分类记录,示例以下:html
你能够阅读 Flask-Admin 文档来学习它的基本用法。git
在 Flask-Admin 里,默认使用普通的文本区域(<textarea>
)来编辑长文本。借助 Flask-CKEditor,你能够很容易的为 Flask-Admin 集成富文本编辑器 CKEditor。github
首先安装 Flask-CKEditor:sql
$ pip install flask-ckeditor复制代码
下面是一个简单的例子,其中的关键步骤已用注释标出:数据库
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
from flask_ckeditor import CKEditor, CKEditorField # 导入扩展类 CKEditor 和 字段类 CKEditorField
app = Flask(__name__)
app.config['SECRET_KEY'] = 'dev'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'
db = SQLAlchemy(app)
ckeditor = CKEditor(app) # 初始化扩展
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(120))
text = db.Column(db.Text)
# 自定义 Post 模型
class PostAdmin(ModelView):
form_overrides = dict(text=CKEditorField) # 重写表单字段,将 text 字段设为 CKEditorField
create_template = 'edit.html' # 指定建立记录的模板
edit_template = 'edit.html' # 指定编辑记录的模板
admin = Admin(app, name='Flask-CKEditor demo')
admin.add_view(PostAdmin(Post, db.session))
if __name__ == '__main__':
app.run(debug=True)复制代码
在模板文件夹里,咱们建立一个 edit.html 文件(templates/edit.html),在这个文件里重载 Flask-Admin 的编辑模板,加载 CKEditor 资源:flask
{% extends 'admin/model/edit.html' %} <!-- 声明继承 Flask-Admin 的模型编辑模板 -->
{% block tail %} <!-- 向父模板的 tail 块内追加内容 -->
{{ super() }}
{{ ckeditor.load() }} <!-- 加载 CKEditor 的 JavaScript 文件,默认从 CDN 获取 -->
{% endblock %}复制代码
实际的编辑页面效果以下图所示:session
完整的可运行的示例程序代码能够在这里获取到。app
你能够阅读 Flask-Admin 文档和 Flask-CKEditor 文档了解更多进阶用法。编辑器
附注:本文改写自我在 Stack Overflow 上的这个回答。ide