为了让网页支持markdown编辑文本,使用如下了4个库

  • PageDown : 在前端提供一个可以实时将markdown内容转换成html文本进行效果预览的编辑器
  • Flask-PageDown: 这个库将PageDown集成到Flask-Wtf库中,更方便使用
  • MarkDown: 将MarkDown标记文本转换为Html文本
  • Bleach: 基于白名单清除Html文本中不安全的标签

PageDown的使用

和其他类库相识,需要初始化

from flask.ext.pagedown import PageDown

pageDown = PageDown(app)

因为PageDown是在前端你用js提供的编辑器,所以与moment库类似需要在模版文件中包含他,如下:

{{ pagedown.include_pagedown() }}

flask-PageDown 将PageDown库集成到了Flask-Wtf中,所以可以直接将他当作wtforms的一个字段来使用,并且wtf.quick_form()也能很好的处理他的显示

from flsk.ext.pagedown.fields import PageDownField

class PostForm(Form):
body = PageDownField(u"微博内容", validators=[validators.DataRequired()])
submit = SubmitField(u'提交')

MarkDown的使用

MarkDown可以将MarkDown标记文本转换成Html文本存放到数据库中,使用很简单,如下:

from markdown import markdown

html_text = markdown(markDown_text, output_format = 'html')
#第一个参数是markdown原文本, 第二个参数传入转换的类型

Bleach的使用

bleach是一个基于白名单的html过滤器,用他将不安全的标签过滤掉,以保证安全 Doc

过滤标签名

import bleach

#允许的标签
allow_tags = ['a', 'abbr', 'acronym', 'b', 'blockquote', 'code', 'em','i','li', 'ol', 'pre', 'strong', 'ul', 'h1', 'h2', 'h3', 'p'] cleaned_text = bleach.clean(html_text,
tags=allow_tags,
strip=True
)

过滤属性:

import bleach

#允许的标签
allow_tags = ['a', 'abbr', 'acronym', 'b', 'blockquote', 'code', 'em','i','li', 'ol', 'pre', 'strong', 'ul', 'h1', 'h2', 'h3', 'p']
#允许的属性
#这样设置将不会过滤所有标签的class属性,和a标签的href,rel属性....
attrs = {
'*': ['class'],
'a': ['href', 'rel'],
'img': ['src', 'alt'],
} cleaned_text = bleach.clean(html_text,
tags=allow_tags,
strip=True,
attrs=attrs
)

其他

保存在数据库时把markdown文本转换成html后再进行清理,最后将安全的html文本储存在数据库中, 由于不安全的标签已被过滤所以在模版中显示时可以加上safe过滤器

Flask学习记录之MarkDown编辑文本的更多相关文章

  1. [ZHUAN]Flask学习记录之Flask-SQLAlchemy

    From: http://www.cnblogs.com/agmcs/p/4445583.html 各种查询方式:http://www.360doc.com/content/12/0608/11/93 ...

  2. Flask学习记录之Flask-Mail

    Flask-Mail可以连接到配置中的SMTP服务器,进行邮件发送,如果没有进行SMTP服务器的配置,将会默认连接到localhost上的 一.配置及初始化 (1)flask应用配置 #配置选项 MA ...

  3. Flask学习记录之Flask-SQLAlchemy

    Flask-SQLAlchemy库让flask更方便的使用SQLALchemy,是一个强大的关系形数据库框架,既可以使用orm方式操作数据库,也可以使用原始的SQL命令. Flask-Migrate ...

  4. ArcGIS学习记录—ArcGIS ArcMap编辑状态中线打断的问题

    摘要:在处理数据时,我们经常会遇到线打断的问题,比如需要指定在线上某处打断线,或者新建网络数据集时需要在线的交点处打段线等等.现将桌面版中我所遇到的线打断的工具总结如下: 在ArcGIS矢量处理数据时 ...

  5. Flask学习记录之Flask-Login

    Flask-Loging 可以方便的管理用户会话,保护路由只让认证用户访问 http://flask-login.readthedocs.org/en/latest/ 一.初始化Flask-Login ...

  6. Flask学习记录之Flask-Admin

    相信用过Django框架的都不会忘记它强大的Admin功能,Flask-admin是一款能够与Django Admin所媲美的扩展,能够快速创建Web管理界面,实现了用户.文件增删改查等常用功能:也可 ...

  7. Flask学习记录之Flask-Migrate

    一.配置Flask-Migrate from flask.ext.migrate import Migrate, MigrateCommand migrate = Migrate(app,db) #第 ...

  8. Flask学习记录之Flask-WTF

    Flask-wtf时Wtforms库的flask框架扩展,能够方便的处理Web表单 一.定义一个web表单 使用flask-wtf时,每个web表单都由一个继承自flask.ext.wtf.Form的 ...

  9. Flask学习记录之Flask-Moment

    Moment.js 是一个简单易用的轻量级JavaScript日期处理类库,提供了日期格式化.日期解析等功能.它支持在浏览器和NodeJS两种环境中运行.此类库能够 将给定的任意日期转换成多种不同的格 ...

随机推荐

  1. Android 解析JSON数组

    1:服务端是使用PHP,从数据库中查询出一个二维数组,然后调用系统函数以json格式返回给客户端. 返回结果如下:http://192.168.0.116/server/selectTitle2jso ...

  2. 在线安装maven插件问题:Cannot complete the install because one or more required items could not be found.

    用Eclipse在线安装的方式:Help-->Install  New Software 地址输入:http://m2eclipse.sonatype.org/sites/m2e/,列表中打勾勾 ...

  3. Python web.py 实例和源码分析:

    示例: http://jyd.me/python/cookie-and-session/ simple to do:http://simple-is-better.com/news/309 http: ...

  4. 【HDOJ】1497 Simple Library Management System

    链表. #include <cstdio> #include <cstring> #include <cstdlib> #define MAXM 1001 #def ...

  5. SPOJ 0962 Intergalactic Map

    题目大意:在一个无向图中,一个人要从A点赶往B点,之后再赶往C点,且要求中途不能多次经过同一个点.问是否存在这样的路线.(3 <= N <= 30011, 1 <= M <= ...

  6. Java并发3-多线程面试题

    1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速. 2) 线程和进程有什 ...

  7. Windows服务器Pyton辅助运维--02.远程重启IIS服务器

    Windows服务器Pyton辅助运维 02.远程重启IIS服务器 开发环境: u  Web服务器: Windows Server 2008 R2 SP1 IIS 7.5 u  运维服务器: Pyth ...

  8. POJ(2784)Buy or Build

    Buy or Build Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1369   Accepted: 542 Descr ...

  9. 简单干净的C# MVC设计案例:BrothersDropdownList()

    团队切换器 在/Teams/Details?id=xxx的页面,有这样一个控件,使得不需要回到/Teams/Index就能轻松切换团队: 由于这种团队切换控件比比皆是,比如在团队故事板中(以及其他地方 ...

  10. 如何用SVN进行个人版本管理

    事实上SVN的确是我用过的最好的源码管理工具,虽然我用过的这类工具并不多,只有VSS.CVS和SVN,其它像PVCS. TeamSource.ClearCase之类的只有耳闻,因为它们都是商业产品,并 ...