返回JSON数据作为回应是常见的情况,aiohttp.web
提供了返回JSON的快捷方式 - aiohttp.web.json_response()
:
def handler(request):
data = {'some': 'data'}
return web.json_response(data)
快捷方法返回aiohttp.web.Response
实例,因此我们可以在从处理程序返回之前设置cookie。
但我的curl请求会返回Content-Type: application/json; charset=utf-8
,但我只需要application/json
,如何避免charset=utf-8
?
答案 0 :(得分:1)
为什么要避免在内容类型中使用charset=utf-8
?如果您未指定,则从W3C开始,回退(默认值)将为ISO-8859-1
。
您的问题的实际答案:当前的aiohttp版本不支持使用json_response
快捷方式功能更改字符集。即使直接使用aiohttp.web.Response
而未指定字符集,也会将charset=utf8
添加到回复的 Content-Type 中。您可以更改charset但不要忽略它(除非text
的{{1}}参数设置为无)。
要使用aiohttp.web.Response.__init__
更改字符集,您可以执行以下操作:
json_response
或使用web.json_response(
data,
content_type=None,
headers={aiohttp.hdrs.CONTENT_TYPE: 'application/json; charset=ISO-8859-1'},
)
每次都不要重复这个冗长的函数调用:
functools.partial
您可以查看my_json_resp = partial(
web.json_response,
content_type=None,
headers={aiohttp.hdrs.CONTENT_TYPE: 'application/json; charset=ISO-8859-1'},
)
# later in your app
return my_json_resp(data)
here和json_response
here的来源,亲自查看。