第一种方法:
Response
已在中间件阶段进行渲染,因此您不仅可以更改response.data
,还需要重新渲染或直接更改渲染的内容。
class RequestLogMiddleWare(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
if isinstance(response, Response):
response.data['detail'] = 'I have been edited'
# you need to change private attribute `_is_render`
# to call render second time
response._is_rendered = False
response.render()
return response
第二种方法:
第二种方法是直接更改内容,但是在这种情况下,内置的REST Framework浏览器API将无法正常工作,因为模板无法正确呈现。
import json
class RequestLogMiddleWare(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
if isinstance(response, Response):
response.data['detail'] = 'I have been edited'
response.content = json.dumps(response.data)
return response
第三种方法:
该方法更合理一些
class RequestLogMiddleWare(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
return response
def process_template_response(self, request, response):
if hasattr(response, 'data'):
response.data['detail'] = 'bla-bla-bla'
return response