一尘不染

Flask请求和应用程序/ json内容类型

json

我有一个烧瓶应用程序,具有以下视图:

@menus.route('/', methods=["PUT", "POST"])
def new():
    return jsonify(request.json)

但是,这仅在请求的内容类型设置为时才有效application/json,否则dict request.json为None。

我知道request.data请求主体为字符串,但我不想每次客户端忘记设置请求的内容类型时都将其解析为字典。

有没有办法假设每个传入请求的content-
type是application/json?我想要的就是始终访问有效的request.json字典,即使客户端忘记将应用程序的内容类型设置为json。


阅读 217

收藏
2020-07-27

共1个答案

一尘不染

使用request.get_json()并设置forceTrue

@menus.route('/', methods=["PUT", "POST"])
def new():
    return jsonify(request.get_json(force=True))

从文档中:

默认情况下,如果mimetype为,则此函数仅加载json数据,application/json但可以被 force 参数覆盖。

参数:

  • 强制 –如果设置为 True ,则忽略模仿类型。

对于低于0.10的旧Flask版本,如果您想宽恕并允许JSON,则始终可以自己明确地进行解码:

from flask import json

@menus.route('/', methods=["PUT", "POST"])
def new():
    return jsonify(json.loads(request.data))
2020-07-27