视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Python的Flask框架中集成CKeditor富文本编辑器
2020-11-27 14:26:06 责编:小采
文档

CKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行,互联网上很容易找到相关技术文档,国内许多WEB项目和大型网站均采用了CKeditor。

下载CKeditor
访问CKeditor官方网站,进入下载页面,选择Standard Package(一般情况下功能足够用了),然后点击Download CKEditor按钮下载ZIP格式的安装文件。如果你想尝试更多的功能,可以选择下载Full Package。

下载好CKeditor之后,解压到Flask项目static/ckeditor目录即可。

在Flask项目中使用CKeditor
在Flask项目中使用CKeditor只需要执行两步就可以了:

在<script>标签引入CKeditor主脚本文件。可以引入本地的文件,也可以引用CDN上的文件。
使用CKEDITOR.replace()把现存的<textarea>标签替换成CKEditor。
示例代码:

因为CKeditor足够优秀,所以第二步也可只为<textarea>追加名为ckeditor的class属性值,CKeditor就会自动将其替换。例如:

CKEditor脚本文件也可以引用CDN上的文件,下面给出几个参考链接:

基础版(迷你版)

标准版

完整版
开启上传功能
默认配置下,CKEditor是没有开启上传功能的,要开启上传功能,也相当的简单,只需要简单修改配置即可。下面来看看几个相关的配置值:

  • filebrowserUploadUrl :文件上传路径。若设置了,则上传按钮会出现在链接、图片、Flash对话窗口。

  • filebrowserImageUploadUrl : 图片上传路径。若不设置,则使用filebrowserUploadUrl值。

  • filebrowserFlashUploadUrl : Flash上传路径。若不设置,则使用filebrowserUploadUrl值。

  • 为了方便,这里我们只设置filebrowserUploadUrl值,其值设为/ckupload/(后面会在Flask中定义这个URL)。

    设置配置值主要使用2种方法:

    方法1:通过CKEditor根目录的配置文件config.js来设置:

    方法2:将设置值放入作为参数放入CKEDITOR.replace():

    Flask处理上传请求
    CKEditor上传功能是统一的接口,即一个接口可以处理图片上传、文件上传、Flash上传。先来看看代码:

    def gen_rnd_filename():
     filename_prefix = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
     return '%s%s' % (filename_prefix, str(random.randrange(1000, 10000)))
    
    @app.route('/ckupload/', methods=['POST'])
    def ckupload():
     """CKEditor file upload"""
     error = ''
     url = ''
     callback = request.args.get("CKEditorFuncNum")
     if request.method == 'POST' and 'upload' in request.files:
     fileobj = request.files['upload']
     fname, fext = os.path.splitext(fileobj.filename)
     rnd_name = '%s%s' % (gen_rnd_filename(), fext)
     filepath = os.path.join(app.static_folder, 'upload', rnd_name)
     # 检查路径是否存在,不存在则创建
     dirname = os.path.dirname(filepath)
     if not os.path.exists(dirname):
     try:
     os.makedirs(dirname)
     except:
     error = 'ERROR_CREATE_DIR'
     elif not os.access(dirname, os.W_OK):
     error = 'ERROR_DIR_NOT_WRITEABLE'
     if not error:
     fileobj.save(filepath)
     url = url_for('static', filename='%s/%s' % ('upload', rnd_name))
     else:
     error = 'post error'
     res = """
    
    <script type="text/javascript">
     window.parent.CKEDITOR.tools.callFunction(%s, '%s', '%s');
    </script>
    
    """ % (callback, url, error)
     response = make_response(res)
     response.headers["Content-Type"] = "text/html"
     return response

    上传文件的获取及保存部分比较简单,是标准的文件上传。这里主要讲讲上传成功后如何回调的问题。

    CKEditor文件上传之后,服务端返回HTML文件,HTML文件包含JAVASCRIPT脚本,JS脚本会调用一个回调函数,若无错误,回调函数将返回的URL转交给CKEditor处理。

    这3个参数依次是:

  • CKEditorFuncNum : 回调函数序号。CKEditor通过URL参数提交给服务端

  • URL : 上传后文件的URL

  • Error : 错误信息。若无错误,返回空字符串

  • 使用蓝本
    在大型应用中经常会使用蓝本,在蓝本视图中集成CKEditor的步骤和app视图基本相同。

    1. 创建蓝本时需指明蓝本static目录的绝对路径

    demo = Blueprint('demo', static_folder="/path/to/static")

    2. 对应url需加上蓝本端点

    3. 设置endpoint端点值

    response = form.upload(endpoint=demo)

    更多Python的Flask框架中集成CKeditor富文本编辑器相关文章请关注PHP中文网!

    下载本文
    显示全文
    专题