我想在中间件的请求正文中添加新字段,并在视图中使用它。
我用谷歌搜索,但结果不起作用。
我该怎么办?
Django v2 python 3.6
答案 0 :(得分:0)
尝试以下代码:
class SimpleMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
my_request = request.GET.copy()
my_request['foo']='bar'
request.GET = my_request
response = self.get_response(request)
return response
我为您尝试过:将以上代码添加到example.py
中,然后将'example.SimpleMiddleware',
添加到MIDDLEWARE
我的view
方法:
def index(request):
for key in request.GET:
print (key, '--->', request.GET[key])
return render(request, 'example.html')
能够打印foo ---> bar
的浏览器发送请求。
答案 1 :(得分:0)
您需要添加单独的自定义中间件,该中间件将在着陆到特定视图之前处理请求。以下是自定义中间件的代码:
class ProcessRequestMiddleware(MiddlewareMixin):
"""
This middleware appends new payload in request body
"""
def process_view(self, request, view_func, *view_args, **view_kwargs):
request_data = getattr(request, '_body', request.body)
request_data = json.loads(request_data)
# here you can write the logic to append the payload to request data
request._body = json.dumps(request_data)
return None
注意-中间件位于通用应用程序内(common / middleware / custommiddleware.py)
现在将此中间件添加到settings.MIDDLEWARE列表:
"common.middleware.custommiddleware.ProcessRequestMiddleware"
现在,您只需调用json.loads(request.body)
,即可在所需的任何视图内检索已添加到custommiddleware中的有效负载。