python - before_action ...仅限:如何在python烧瓶中执行此操作?
问题描述
我需要将 ruby 代码更改为 python,我对此也很陌生。有人能告诉我有没有像 before_action 这样的功能......仅限:在 python 烧瓶中?这是我要更改的功能:
class IftttController < ActionController::Base
before_action :return_errors_unless_valid_service_key
before_action :return_errors_unless_valid_action_fields, only: :create_new_thing
def return_errors_unless_valid_service_key
unless request.headers["HTTP_IFTTT_SERVICE_KEY"] == IFTTT_SERVICE_KEY
return render plain: { errors: [ { message: "401" } ] }.to_json, status: 401
end
end
def return_errors_unless_valid_action_fields
if params[:actionFields] && params[:actionFields][:invalid] == "true"
return render plain: { errors: [ { status: "SKIP", message: "400" } ] }.to_json, status: 400
end
end
end
正如我在互联网上阅读的那样,@app.before_request 等于它,但我不知道如何将它用于特定操作(before_action:return_errors_unless_valid_action_fields,仅::create_new_thing),就像在 ruby on rails 上一样,这是我的代码,我不知道它是否正确:
@ifttt.before_request
def return_errors_unless_valid_action_fields():
if request.args.get("actionFields") and request.args["actionFields"]["invalid"] == True:
return render_template_string(jsonify(errors = [{status= "SKIP", message = "400"}]), 400
谁能帮我?非常感谢。
解决方案
Flask 应用程序有一些钩子可以让用户在请求之前或之后运行函数:
app = Flask(...)
@app.before_request
def i_have_been_called():
print('I have been called')
这应该在每个请求之前向控制台输出“我已被调用”。
Flask 中内置的其他钩子包括before_request
、before_first_request
、after_request
等teardown_appcontext
。
至于only:
参数,Flask中没有这样的东西。您必须简单地编写函数来检查这种情况:
@app.before_request
def i_prefer_post():
from flask import request
if request.method == 'POST':
print('I prefer POST')
推荐阅读
- testing - 测试 Google Invisible reCAPTCHA v2
- deep-learning - 如果我有双数据类型作为输入(数据类型:双),我是否需要嵌入 LSTM
- javascript - 连接一段时间后 Redis ETIMEDOUT 错误
- java - 如何在使用 ImageIO.read() 时解决“java.io.EOFException:ZLIB 输入流的意外结束”
- html - 单击任何单选按钮以切换开关
- laravel - 如何在刀片文件中获取性别(男/女)
- .net - 如何在 webforms .net 2.0 应用程序中实现 Reflect XSS 修复
- qt - 光标下的 QGraphicsItem 在离开对象时离开另一个项目
- flutter - SliverGeometry 无效:“maxPaintExtent”小于 Flutter 中的“paintExtent”
- html - 如何修复字体真棒图标未显示在移动设备/ chrome 上?