在11.4.2这章中,有提到在服务器上处理富文本,在模型中定义了函数将Markdown格式转换为HTML格式: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)
author_id = db.Column(db.Integer,db.ForeignKey('users.id'))
body_html = db.Column(db.Text)
@staticmethod
def on_changed_body(target,value,oldvalue,initiator):
allowed_tags = ['a','abbr','acronym','b','blockquote','code','em','i','li','ol','pre','strong','ul','h1','h2','h3','p']
target.body_html=bleach.linkify(bleach.clean(markdown(value,output_format='html'),tags=allowed_tags,strip=True))
db.event.listen(Post.body,'set',Post.on_changed_body)文章中说将on_changed_body函数注册在body字段上,当类实例的body字段设置了新值后就会自动调用类实例的on_changed_body方法。不是很明白:在定义的时候,on_changed_body方法不是设置了四个参数么?def on_changed_body(target,value,oldvalue,initiator)。没有传入这四个参数也能调用吗?而且这四个参数中的value,oldvalue,initiator是什么作用?
1 回答
慕容3067478
TA贡献1773条经验 获得超3个赞
你用的flask的什么extension? 这四个参数你不用关心怎么传入,你只需要理解这几个参数什么意思,然后重写on_changed_body这个方法。
添加回答
举报
0/150
提交
取消