python - Flask 将 POST 参数传递给自定义装饰器

标签 python flask http-post

我看过关于路过的帖子GET参数和硬编码参数 herehere .

我想做的是通过 POST自定义装饰器的参数。 route实际上并不渲染页面,而是处理一些内容并通过 AJAX 调用将结果发送回。

装饰器看起来像这样:

# app/util.py

from functools import wraps
from models import data

# custom decorator to validate symbol
def symbol_valid():
    def decorator(func):
        @wraps(func)
        def decorated_function(symbol, *args, **kwargs):
            if not data.validate_symbol(symbol):
                return jsonify({'status': 'fail'})
            return func(*args, **kwargs)
        return decorated_function
    return decorator

View 看起来像这样:

# app/views/matrix_blueprint.py

from flask import Blueprint, request, jsonify

from ..models import data
from ..util import symbol_valid

matrix_blueprint = Blueprint('matrix_blueprint', __name__)

# routing for the ajax call to return symbol details
@matrix_blueprint.route('/route_line', methods=['POST'])
@symbol_valid
def route_line():
    symbol = request.form['symbol'].upper()
    result = data.get_information(symbol)
    return jsonify(**result)

我明白我实际上可以调用 @symbol_valid()当我通过 GET 传递参数时像这样/quote_line/<symbol>但我需要POST .

接下来的问题是我的装饰器如何访问POST ed 变量?

最佳答案

简单的解决方案。将 Flask 的 request 模块导入到包含装饰器的 util.py 模块中。也删除了外部函数。

查看代码:

# app/util.py

from flask import request # <- added

from functools import wraps
from models import data

# custom decorator to validate symbol

def symbol_valid(func):
    @wraps(func)
    def decorated_function(*args, **kwargs): # <- removed symbol arg
        symbol = request.form['symbol'] # <- paramter is in the request object
        if not data.validate_symbol(symbol):
            return jsonify({'status': 'fail'})
        return func(*args, **kwargs)
    return symbol_valid

关于python - Flask 将 POST 参数传递给自定义装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33686834/

相关文章:

python - 如何使用Sqlalchemy和Flask关闭MySql连接?

python - 是否可以在 python 中将动态(带有静态文件)Web 应用程序作为没有其他依赖项的单个包提供服务?

xcode - 在 Swift 中发出 Amazon Web Services S3 POST 请求

python - Django 在发送 POST 请求时返回 403 错误

Android:带参数的 Http post 不起作用

python - 在Python中动态加载模块中的所有名称

python - 当我想存储这样复杂的数据时,如何设计models.py?

python - 如何在 x 轴 python 和中心条上移动标签,Python

postgresql - 如何处理为 Multi-Tenancy Web 应用程序动态创建模式/表

python - 对 python 数组进行排序