Flask学习记录之MarkDown编辑文本

为了让网页支持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过滤器

posted @ 2015-04-22 22:08  agmcs  阅读(2493)  评论(0编辑  收藏  举报