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過濾器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM