在django的middle中可以做一些公共的事情,比如在http头中加入用户认证信息,统一异常处理,统一返回值格式等。
在统一返回值格式的时候,是需要修改response的数据的。这里直接修改response的数据还不够,因在views中返回时,
已经render了数据,修改response的返回数据时需要重新再render一次。
class RewardMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
response = self.get_response(request)
# Code to be executed for each request/response after
# the view is called.
data = None
if hasattr(response, 'data'):
data = response.data
response.data = {
'code': 0,
'data': data,
'msg': 'OK'
}
# 因返回时已经render过response,要想让这里的修改有效,需要手动在render一次
response._is_rendered = False
response.render()
return response
参考: https://stackoverflow.com/questions/44112528/editing-response-content-in-django-middleware