Flask web开发中的关于在服务器上处理富文本的问题

在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是什么作用

阅读 2.9k
1 个回答

你用的flask的什么extension? 这四个参数你不用关心怎么传入,你只需要理解这几个参数什么意思,然后重写on_changed_body这个方法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题