博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Flask-CKEditor在Flask项目中集成富文本编辑器
阅读量:6323 次
发布时间:2019-06-22

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

富文本编辑器即WYSIWYG(What You See Is What You Get)编辑器(所见即所得编辑器)。在Web程序中可用的开源富文本编辑器中, 是一个流行的选择。扩展 简化了将CKEditor集成到Flask项目中的过程,可以让你方便的在Flask项目中添加富文本编辑器。它包含下面这些特性:
  • 提供WTForms/Flask-WTF集成支持
  • 支持图片上传与插入
  • 通过Flask配置来设置编辑器的语言、高度等参数
  • 支持代码块语法高亮
中的第2个示例程序( )使用了这个扩展。

基本用法

安装

首先使用pip或Pipenv等工具安装:
$ pip install flask-ckeditor复制代码

初始化扩展

一般情况下,你只需要导入并实例化CKEditor类,并传入程序实例即可:
from flask_ckeditor import CKEditorapp = Flask(__name__)ckeditor = CKEditor(app)复制代码
如果你使用了工厂函数,那么也可以调用init_app()方法来进行初始化:
from flask_ckeditor import CKEditorckeditor = CKEditor()def create_app():    app = Flask(__name__)    ckeditor.init_app(app)    return app复制代码

引入CKEditor资源

为了使用CKEditor,我们首先要在模板中引入CKEditor的JavaScript等资源文件。推荐的做法是自己编写资源引用语句,你可以在CKEditor提供的 构建一个自定义的资源包,下载解压后放到项目的static目录下, 并引入资源包内的ckeditor.js文件,比如(实际路径按需调整):
复制代码
如果你不需要自定义,那么也可以从CDN加载:
复制代码
最后,作为替代选项,你也可以使用Flask-CKEditor提供的ckeditor.load()方法来生成引用语句:
{
{ ckeditor.load() }}复制代码
它默认从CDN加载资源,将配置变量CKEDITOR_SERVE_LOCAL设为True会使用扩展内置的本地资源。另外,你也可以使用custom_url参数来使用自定义资源包:
{
{ ckeditor.load(custom_url=url_for('static', filename='ckeditor/ckeditor.js')) }}复制代码

创建CKEditor文本区域

Flask-CKEditor提供了两种方式来CKEditor文本区域:

1. 与WTForms/Flask-WTF集成
Flask-CKEditor提供了一个CKEditorField字段类,和你平时从WTForms导入的StringField、SubmitField用法相同。事实上,它就是对WTForms提供的TextAreaField进行了包装。
作为示例,我们可以创建一个写文章的表单类。这个表单类包含一个标题字段(StringField),一个正文字段(CKEditorField)和一个提交字段(SubmitField)。你会看到,其中的正文字段使用了CKEditorField。
from flask_wtf import FlaskFormfrom flask_ckeditor import CKEditorFieldfrom wtforms import StringField, SubmitFieldclass PostForm(FlaskForm):    title = StringField('Title')    body = CKEditorField('Body')    submit = SubmitField('Submit')复制代码
在渲染文本编辑区域的模板中,我们可以像往常一样渲染表单:
{
{ form.title.label }}{
{ form.title() }} {
{ form.body.label }}{
{ form.body() }} {
{ form.submit() }}
{
{ ckeditor.load() }}{
{ ckeditor.config(name='body') }}复制代码
唯一需要注意的是,我们需要在资源引用语句后调用ckeditor.config()方法来让对CKEditor进行配置和初始化,并将name参数的值设为CKEditor字段的属性名,这里即body。
当表单提交后,你可以像其他字段一样通过form.attr.data属性来获取数据,这里的文本区域数据即form.body.data。

2. 手动创建
如果你不使用WTForms/Flask-WTF,那么可以直接使用Flask-CKEditor提供的ckeditor.create()方法在模板中创建文本编辑区域:
{
{ ckeditor.create() }}
{
{ ckeditor.load() }}{
{ ckeditor.config() }}
复制代码
在表单被提交后,你可以使用ckeditor作为键从表单数据中获取对应的值,即request.form.get('ckeditor')。

提示 完整的示例程序在 和 目录下。

配置变量

Flask-CKEditor提供了下面这些配置变量(文本形式见 ):
Flask-CKEditor支持的配置

图片上传

在使用文本编辑器写文章时,上传图片是一个很常见的需求。在CKEditor中,图片上传可以通过 插件实现。在服务器端的Flask程序中,你需要做三件事:
  1. 创建一个视图函数来处理并保存上传文件
  2. 创建一个视图函数来获取图片文件,类似Flask内置的static端点
  3. 将配置变量CKEDITOR_FILE_UPLOADER设为这个视图函数的URL或端点值
完整的代码示例如下所示:
from flask_ckeditor import upload_success, upload_failapp.config['CKEDITOR_FILE_UPLOADER'] = 'upload'@app.route('/files/
')def uploaded_files(filename): path = '/the/uploaded/directory' return send_from_directory(path, filename)@app.route('/upload', methods=['POST'])def upload(): f = request.files.get('upload') # 获取上传图片文件对象 # Add more validations here if extension not in ['jpg', 'gif', 'png', 'jpeg']: # 验证文件类型示例 return upload_fail(message='Image only!') # 返回upload_fail调用 f.save(os.path.join('/the/uploaded/directory', f.filename)) url = url_for('uploaded_files', filename=f.filename) return upload_success(url=url) # 返回upload_success调用复制代码
注意 传入request.files.get()的键必须为'upload', 这是CKEditor定义的上传字段name值。
在处理上传文件的视图函数中,你必须返回upload_success()调用,每将url参数设置为获取上传文件的URL。通常情况下,除了保存文件,你还需要对上传的图片进行验证和处理(大小、格式、文件名处理等等,具体可以访问这篇 了解),在验证未通过时,你需要返回upload_fail()调用,并使用message参数传入错误消息。
当设置了CKEDITOR_FILE_UPLOADER配置变量后,你可以在编辑区域点开图片按钮打开的弹窗中看到一个新的上传标签。另外,你也可以直接将图片文件拖拽到编辑区域进行上传,或复制文件并粘贴到文本区域进行上传(CKEditor >= 4.5)。

提示 对应的示例程序在 目录下。

代码语法高亮

代码语法高亮可以通过 插件实现(基于hightlight.js),你可以将配置变量CKEDITOR_ENABLE_CODESNIPPET设为Ture来开启。在此之前,你需要确保安装了这个插件(内置的资源包包含了这个插件)。
为了正确渲染代码块,你还需要引入对应的资源文件,最简单的方式是使用Flask-CKEditor提供的ckeditor.load_code_theme()方法:
 ... {
{ ckeditor.load_code_theme() }}复制代码
你可以通过配置变量CKEDITOR_CODE_THEME来设置语法高亮的主题,默认为monokai_sublime,你可以在 看到所有可用的主题对应的字符串。

提示 对应的示例程序在 目录下。

使用示例程序

项目仓库中提供了5个示例程序,分别展示基本用法、图片上传插入、代码语法高亮、Markdown模式和不使用Flask-WTF/WTForms。以基本示例程序为例,你可以通过下面的命令来获取并运行它:
$ git clone https://github.com/greyli/flask-ckeditor$ cd flask-ckeditor/examples$ pip install -r requirements.txt$ python basic/app.py复制代码
然后在浏览器访问http://127.0.0.1:5000。

另外,里在demos/form目录下的示例程序也包含一个Flask-Dropzone使用示例。

相关链接

  • GitHub:
  • PyPI:

转载地址:http://ahcaa.baihongyu.com/

你可能感兴趣的文章
《Metasploit渗透测试手册》—第1章1.5节在单机上建立渗透测试环境
查看>>
《语义网基础教程(原书第3版)》—— 2.5 RDF模式:语言
查看>>
《Adobe After Effects CS6完全剖析》——正确的设置
查看>>
微软技术透明中心将源代码向中国公开,这回是要干啥
查看>>
《ANTLR 4权威指南》——1.2节运行ANTLR并测试识别程序
查看>>
游戏开发引擎 Cryengine 在 GitHub 上公开全部源代码
查看>>
福特首席数据科学家谈三点大数据经验
查看>>
2015软件漏洞排行:Mac OS X、iOS、Flash均上榜
查看>>
《互联网金融投资理财一册通》一一第2章 揭秘余额宝收益背后的秘密
查看>>
《SAS 统计分析与应用从入门到精通(第二版)》一导读
查看>>
如何在 Linux 中生成全景照片
查看>>
《Android传感器开发与智能设备案例实战》——第1章,第1.1节智能手机操作系统介绍...
查看>>
Docker技术入门与实战(第2版)1.1 什么是Docker
查看>>
《jQuery EasyUI开发指南》——1.2 管理系统需求分析
查看>>
TED演讲 | 数据滥用时代,3招教你辨别身边不靠谱数据
查看>>
Angular从零到一》一3.4 小练习
查看>>
RabbitMQ消息队列(1):RabbitMQ入门
查看>>
《计算广告:互联网商业变现的市场与技术》一1.2 广告的定义与目的
查看>>
解读阿里云成功运营生态体系的两个关键密码:开放与双向赋能
查看>>
Linux基础:分析 Ubuntu 磁盘使用情况
查看>>