在单个视图方法中接受多个请求类型的更好方法是什么?

ian*_*ter 11 python flask

我正在尝试向各种请求方法公开API(GET,url x-www-form-urlencoded POST和json POST):

@app.route('/create', methods=['GET', 'POST'])
def create_file():
    if request.method == 'GET':
        n = request.args.get('n')
        t = request.args.get('t')
    if request.method == 'POST':
        if request.json:
            n = request.json['n']
            t = request.json['t']
        else:
            n = request.form['n']
            t = request.form['t']
    try:
        n = int(n)
    except:
        n = 1
    ...
Run Code Online (Sandbox Code Playgroud)

以上看起来过于冗长.是否有更简单或更好的写作方式?谢谢.

Mig*_*uel 18

这看起来更好吗?在我看来,如果您可以接受将JSON POST请求移动到不同的路径(您真的应该这样做),我会更清洁一点.

def _create_file(n, t):
    try:
        n = int(n)
    except:
        n = 1
    ...

@app.route('/create')
def create_file():
    n = request.args.get('n')
    t = request.args.get('t')
    return _create_file(n, t)

@app.route('/create', methods = ['POST'])
def create_file_form():
    n = request.form.get('n')
    t = request.form.get('t')
    return _create_file(n, t)

@app.route('/api/create', methods = ['POST'])
def create_file_json():
    if not request.json:
        abort(400); # bad request
    n = request.json.get('n')
    t = request.json.get('t')
    return _create_file(n, t)
Run Code Online (Sandbox Code Playgroud)