【发布时间】:2016-02-14 16:27:41
【问题描述】:
我看过关于传递GET 参数和硬编码参数here 和here 的帖子。
我想要做的是将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
视图看起来像这样:
# 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)
我知道当我通过GET 像这样/quote_line/<symbol> 传递参数时,我实际上可以调用@symbol_valid(),但我需要POST。
那么问题是我的装饰器如何访问POSTed 变量?
【问题讨论】:
-
symbol不是该帖子路由中的 url 参数,您需要将表单放入装饰器并在那里检查,我猜