我有一个烧瓶应用程序,具有以下视图:
@menus.route('/', methods=["PUT", "POST"]) def new(): return jsonify(request.json)
但是,这仅在请求的内容类型设置为时才有效application/json,否则dict request.json为None。
application/json
request.json
我知道request.data请求主体为字符串,但我不想每次客户端忘记设置请求的内容类型时都将其解析为字典。
request.data
有没有办法假设每个传入请求的content- type是application/json?我想要的就是始终访问有效的request.json字典,即使客户端忘记将应用程序的内容类型设置为json。
使用request.get_json()并设置force为True:
request.get_json()
force
True
@menus.route('/', methods=["PUT", "POST"]) def new(): return jsonify(request.get_json(force=True))
从文档中:
默认情况下,如果mimetype为,则此函数仅加载json数据,application/json但可以被 force 参数覆盖。 参数: 强制 –如果设置为 True ,则忽略模仿类型。
默认情况下,如果mimetype为,则此函数仅加载json数据,application/json但可以被 force 参数覆盖。
参数:
对于低于0.10的旧Flask版本,如果您想宽恕并允许JSON,则始终可以自己明确地进行解码:
from flask import json @menus.route('/', methods=["PUT", "POST"]) def new(): return jsonify(json.loads(request.data))