zoukankan      html  css  js  c++  java
  • 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过滤器

  • 相关阅读:
    娓娓道来c指针 (4)解析c的声明语句
    Snail—UI学习之UITextField
    E
    Qt录音机
    著名的英文搜索引擎
    java中Map,List与Set的差别
    Android图片处理:识别图像方向并显示
    Unity3D中组件事件函数的运行顺序
    Android屏幕density, dip等相关概念总结
    Codeforces Round #257 (Div. 2)
  • 原文地址:https://www.cnblogs.com/agmcs/p/4448864.html
Copyright © 2011-2022 走看看