我有一个Flask课:
class Likes(object):
def __init__(self, model, table_id):
self.model = model
self.table_id = table_id
if request.form["likes"] == 'like':
query = self.model.query.filter_by(id=table_id).first()
query.likes += 1
db.session.commit()
flash(u'Like =)) ' + query.title, 'info')
elif request.form["likes"] == 'dislike':
query = self.model.query.filter_by(id=table_id).first()
query.likes -= 1
db.session.commit()
flash(u"Don't like =(" + query.title, 'info')
Run Code Online (Sandbox Code Playgroud)
我希望每次用户发送POST请求时调用此类,但每次创建我的类的实例时,我都需要添加检查请求类型:
# ...
if request.method == 'POST':
Likes(Post, request.form["post_id"])
# ...
Run Code Online (Sandbox Code Playgroud)
如何改进我的课程并在其中添加此检查:
if request.method == 'POST':
# ...
Run Code Online (Sandbox Code Playgroud)
解决方案: 使用装饰器@ app.before_request
@app.before_request
def before_req():
if request.method == 'POST':
flash(u'Before request', 'success')
Run Code Online (Sandbox Code Playgroud)
ami*_*che 11
您可以使用Flask.request_started
信号在每次请求到达时运行某些内容,然后执行您需要的代码.
flask.request_started
此信号在任何请求处理开始之前发送,但是在设置请求上下文时发送.由于请求上下文已经绑定,因此订阅者可以使用标准全局代理(例如请求)访问请求.
查看Flask的Signals章节以了解更多信息.
在代码中使用类似的东西:
def create_like(sender, **extra):
if request.method == 'POST':
Likes(Post, request.form["post_id"])
from flask import request_started
request_started.connect(create_like, app)
Run Code Online (Sandbox Code Playgroud)
这是根据核心信号文档的示例改编的.
归档时间: |
|
查看次数: |
13508 次 |
最近记录: |