侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python的Flask框架中集成CKeditor富文本编辑器的教程

Python  /  管理员 发布于 7年前   260

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。
示例代码:

<!DOCTYPE html><html>  <head>    <title>A Simple Page with CKEditor</title>    <!-- 请确保CKEditor文件路径正确 -->    <script src="https:/article/{{ url_for('static', filename='ckeditor/ckeditor.js') }}"></script>  </head>  <body>    <form>      <textarea name="editor1" id="editor1" rows="10" cols="80">        This is my textarea to be replaced with CKEditor.      </textarea>      <script>        // 用CKEditor替换<textarea id="editor1">        // 使用默认配置        CKEDITOR.replace('editor1');      </script>    </form>  </body></html>

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

<!DOCTYPE html><html>  <head>    <title>A Simple Page with CKEditor</title>    <!-- 请确保CKEditor文件路径正确 -->    <script src="https:/article/{{ url_for('static', filename='ckeditor/ckeditor.js') }}"></script>  </head>  <body>    <form>      <textarea name="editor1" id="editor1" class="ckeditor" rows="10" cols="80">        This is my textarea to be replaced with CKEditor.      </textarea>    </form>  </body></html>

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

<script src="https://cdn.ckeditor.com/4.4.6/basic/ckeditor.js"></script>

 基础版(迷你版)

<script src="https://cdn.ckeditor.com/4.4.6/standard/ckeditor.js"></script>

 标准版

<script src="https://cdn.ckeditor.com/4.4.6/full/ckeditor.js"></script> 

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

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

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

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

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

CKEDITOR.editorConfig = function( config ) {  // ...  // file upload url  config.filebrowserUploadUrl = '/ckupload/';  // ...};

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

<script>CKEDITOR.replace('editor1', {  filebrowserUploadUrl: '/ckupload/',});</script>

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需加上蓝本端点

<script src="https:/article/{{url_for('.static', filename='ckeditor/ckeditor.js')}}"></script><script type="text/javascript">  CKEDITOR.replace(    "ckeditor_demo", {      filebrowserUploadUrl: './ckupload/'    }  );</script>

3. 设置endpoint端点值

response = form.upload(endpoint=demo)

您可能感兴趣的文章:

  • Python的Flask站点中集成xhEditor文本编辑器的教程
  • 使用Python读写文本文件及编写简单的文本编辑器
  • python基于Tkinter库实现简单文本编辑器实例
  • python写的一个文本编辑器
  • 好用的Python编辑器WingIDE的使用经验总结
  • 基于wxpython开发的简单gui计算器实例
  • python使用wxpython开发简单记事本的方法
  • python使用wxPython打开并播放wav文件的方法
  • Python中使用wxPython开发的一个简易笔记本程序实例
  • Python实现的文本编辑器功能示例


  • 上一条:
    Python的Flask站点中集成xhEditor文本编辑器的教程
    下一条:
    浅谈python中的面向对象和类的基本语法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客