用flask开发个人博客(38)—— 使用MarkDown实现博客文章存储成富文本格式
2017-01-14 13:49
1101 查看
一、MarkDown语法
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。Github中项目的MD文件就是用MarkDown语法进行编写,它内嵌支持Html,可以使用Html的大部分标签。我们使用构建博客表单body字段的PageDownFiled生成的是MarkDown格式的文本,在上一文中我们通过Flask-PageDown实际上是将MarkDown格式的文本转换成了Html格式。下面我们通过实例,来验证PageDownFiled对MarkDown语法的支持:‘#’在MarkDown语法中等价于html中的<h1>标签,我们分别在博客的body中使用上面两个标签,看下预览的效果:
使用<h1>和‘#’都默认生成了一级标题格式的字符串。
二、使用MarkDown模块将Markdown文本装换成html富文本
我们使用MarkDown模块中的markdown函数,将博客中的MarkDown格式的文本转换成html文本,这一功能我们在Post模型中实现。from markdown import markdown import bleach class Post(db.Model): __tablename__='posts' id=db.Column(db.Integer,primary_key=True) body=db.Column(db.Text) timestamp=db.Column(db.DateTime,index=True,default=datetime.utcnow) html_body=db.Column(db.Text) @staticmethod def on_body_change(target,value,oldvalue,initiator): allowed_tags=['a','ul','strong','p','h1','h2','h3'] html_body=markdown(value,output_format='html') html_body=bleach.clean(html_body,tags=allowed_tags,strip=True) html_body=bleach.linkify(htnl_body) target.html_body=html_body db.event.listen(Post.body,'set',Post.on_body_change)我们在Post的模型中增加了一个html_body的字段用来存放,被转换成html格式的文本。并定义了一个静态成员函数on_body_change,在函数中
markdown函数是用来将markdown格式的文本转换成html格式,它接收两个参数,第一个参数是传进来的带转换格式的字符串,第二个参数是输出的格式,这里制定了html。bleach的clean函数负责将多余的html标签进行清除,我们用allowed_tags制定了转换后允许存在的html标签,凡是不再这些指定标签内的其他标签,都会被清除。bleach.linkify的作用是将html文本中的url转换成<a>标签,主要是因为markdown不支持自动将url转换成超链接。
最后一行代码是调用SQLAlchemy中的监听器db.event.listen,它的第一个参数Post.body指定了监听的对象,第二个参数指定的是监听事件的类型,这里的'set'指明凡是修改Post对象的body字段都会触发该监听器。而其第三个参数就是我们自定义的Post的静态成员函数on_body_change,当监听事件发生,on_body_change作为回调函数被调用。
Github位置:
https://github.com/HymanLiuTS/flaskTs
克隆本项目:
Git clone Git@github.com:HymanLiuTS/flaskTs.Git
获取本文源代码:
Git checkout
FL38
相关文章推荐
- 用flask开发个人博客(37)—— 使用Flask-pagedown实现博客文章预览的功能
- 用flask开发个人博客(22)—— 使用Flask-Migrate实现数据库的更新
- 用flask开发个人博客(30)—— 用WerkZeug实现密码的加密存储
- 用flask开发个人博客(36)—— 使用SQLAlchemy对博客文章进行分页
- Django开发个人博客网站——15、通过markdown实现博客内容的展示
- 用flask开发个人博客(16)—— 表单类的使用
- 用flask开发个人博客(24)—— flask中使用Flask_Mail发送电子邮件
- 用flask开发个人博客(33)—— 使用itsdangerous进行账户的确认
- 用flask开发个人博客(11)—— 模板中代码的重复使用
- Xamarin体验:使用C#开发iOS/Android应用(此文章为收藏博客,不是个人经验) by----作者:囧月 出处:http://lwme.cnblogs.com/
- 使用IntelliJ IDEA开发SpringMVC网站(五)博客文章管理
- [Unity3D]手机3D游戏开发:如何实现最高分的存储与显示(七)----使用Game ID避免数据重复输入
- CoreThink主题开发(九)使用H-ui开发博客主题之用户个人主页
- 使用IntelliJ IDEA开发SpringMVC网站(五)博客文章管理
- 用flask开发个人博客(2)—— Flask中的请求对象request
- 用flask开发个人博客(1)—— 一个简单的flask程序
- [Unity3D]手机3D游戏开发:如何实现最高分的存储与显示(五)----使用TextField 输入并调整排名
- windows下使用python的scrapy爬虫框架,爬取个人博客文章内容信息
- 使用Dropbox+Justwriting+Markdown建立个人博客
- [原创]使用 NodeJS, MarkdownJS, PrettifyJS 打造个人博客写作平台 - 整体思路