热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

18.上传文件限制和使用富文本编辑器【完结篇】

本文是后端开发——Flask初体验专栏的最后一篇文章,整个Q&Ademo的简单框架其实已经建立起来了,现在就是再优化、完善一些细节。本文首先完善一下前文

本文是后端开发——Flask初体验专栏的最后一篇文章,整个Q&A demo的简单框架其实已经建立起来了,现在就是再优化、完善一些细节。
本文首先完善一下前文上传头像的部分,增加上传文件的大小和格式限制,其次把发布问答部分中,问题的详细描述部分从普通的textarea修改为富文本编辑器TinyMCE,这样可以在问题描述中添加各种格式的信息,如代码、表格、列表、图片等。
最后,整个demo已经上传到GitHub:QADemoByFlask,欢迎大家访问、关注和交流。


首先在config.py中添加

MAX_CONTENT_LENGTH = 1 * 1024 * 1024

表示最大上传文件的限制是1MB,添加完成即可,Flask会自动处理,如果上传的文件超出,会抛出异常,显示无法连接,但程序不会中断;其次在exts.py中添加函数:

def allowed_file(filename):return '.' in filename and \filename.rsplit('.', 1)[1] in ['jpg', 'jpeg', 'png', 'gif']

我们用这个来确保用户上传的文件是指定的4种扩展名的格式。再从werkzeug库中导出
secure_filename来检验文件名的安全性,这一步也是十分必要的,具体原因可参考Flask文档。此时视图函数修改如下:

@app.route('/user/avatar/', methods=['GET', 'POST'])
def avatar():if request.method == 'POST':file = request.files['avatar_upload']if file and allowed_file(file.filename):filename = secure_filename(file.filename)base_path = path.abspath(path.dirname(__file__))filename = str(g.user.id) + '.' + filename.rsplit('.', 1)[1]file_path = path.join(base_path, 'static', 'images', 'uploads', filename)file.save(file_path)g.user.avatar_path = 'images/uploads/' + filenamedb.session.commit()return render_template('avatar.html')


现在网上有许多富文本编辑器可供我们使用,这里选择TinyMCE,详情和文档可以浏览其官网。首先需要引用tinymce.min.js这个文件,就像是用Bootstrap一样,我们可以直接在线引用,但会有个讨厌的提示,如下图:

因此我直接将其下载(开发版下载)到本地,解压至项目的static文件夹,同时下载汉化文件zh_CN.js,放入langs文件夹,文件夹结构如下:

然后在static/Javascript文件夹中新建一个tinymce_setup.js文件,用于配置TinyMCE,其内容如下:

tinymce.init({selector: '#tinymce-content',language:'zh_CN',height:200,plugins: ['advlist autolink link image lists charmap print preview hr anchor pagebreak spellchecker','searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking','save table contextmenu directionality emoticons template paste textcolor','codesample',],toolbar: 'insertfile undo redo | \styleselect | \bold italic | \alignleft aligncenter alignright alignjustify | \bullist numlist outdent indent | \link image | \print preview media fullpage | \forecolor backcolor emoticons |\codesample fontsizeselect fullscreen',nonbreaking_force_tab: true,
});

代码中selector其实就是css中的选择器,会把对应的html元素替换成TinyMCE富文本编辑器,pluginstoolbar是设定编辑器带有哪些功能和按钮。此时可以在question.html中引入TinyMCEjs和配置文件的js,如下:


其实还需要引入jQuery,但我们之前在引入Bootstrap的时候,在base.html中已经引入了,而question.html又继承自base.html。将question.html中的


替换为


此时再点击发布问答进入页面,已经可以使用TinyMCE了,如下:

随便插入张图片,点击提交试试,发现后端获取到的数据是带html标记的文本,数据库数据如下:

detail.html中的内容也是这样的字符串:

如何把这样的内容渲染成html呢?其实很简单,给html中的参数加个safe过滤器就可以了:

{{ question.content | safe }}

此时detail.html中的图片就正常显示了:



推荐阅读
  • 在tp5项目中引入ueditor编辑器并实例化后插入图片出现目录创建失败问题在查看网络上各种解决方案之后总结如下:根据官网提示主要是因为图片保存的路径无权限导致,官方文档链接:ht ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • AFNetwork框架(零)使用NSURLSession进行网络请求
    本文介绍了AFNetwork框架中使用NSURLSession进行网络请求的方法,包括NSURLSession的配置、请求的创建和执行等步骤。同时还介绍了NSURLSessionDelegate和NSURLSessionConfiguration的相关内容。通过本文可以了解到AFNetwork框架中使用NSURLSession进行网络请求的基本流程和注意事项。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • linux qt打开常用文件格式,设置Linux Qt文件默认打开方式为QtCreator
    Linux自定义文件打开方式也可参照文本抱歉,本文前段时间写的ubuntu下的Qt工程文件默认打开方式是不好用的,因为其他的文本文件也会受到影响,强迫症患者,每次打开Qt工程都是先 ... [详细]
  • 校园表白墙微信小程序,校园小情书、告白墙、论坛,大学表白墙搭建教程
    小程序的名字必须和你微信注册的名称一模一样在后台注册好小程序。mp.wx-union.cn后台域名https。mp.wx-union.cn ... [详细]
  • 用ESP32与Python实现物联网(IoT)火焰检测报警系统
    下图是本案例除硬件连线外的3步导学开发过程,每个步骤中实现的功能请参考图中的说明。在硬件连线完成之后我们建议您先使用“一分钟上云体验”功能预先体验本案例的实际运行效果 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
author-avatar
手机用户2502903053
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有