【问题标题】:how to get access to post data incoming inside a Django middleware?如何访问 Django 中间件中传入的发布数据?
【发布时间】:2022-01-04 04:48:00
【问题描述】:

我正在编写一个中间件,因此我需要访问发布数据,但没有一个答案能解决我的疑问,我正在读取这样的数据,但这在邮递员中工作但在浏览器中出错

  dict_str = request.body.decode("UTF-8")

非常感谢任何帮助

错误

RawPostDataException at /accounts/api/v1/register/
You cannot access body after reading from request's data stream

【问题讨论】:

  • 它会给你什么错误?
  • 我需要在新用户注册时使用request.body来检查他/她的密码是否足够强大,在中间件中进行以提高效率,有什么办法可以访问request.body以及为什么 django 在访问它时出错,是否会导致应用程序出现任何问题
  • 通常你会在序列化器的验证器中这样做。见这里:stackoverflow.com/questions/36414804/…

标签: django django-rest-framework


【解决方案1】:

你可以试试这个,希望能成功

import json
import ast
def CustomMiddleware(get_response):
    def middleware(request):
        bytes_request_data = getattr(request, '_body', request.body)
        if bytes_request_data:
            request_data = ast.literal_eval(bytes_request_data.decode('utf-8'))
            print(request_data)

【讨论】:

  • 不,我试过了,它给出了同样的错误
  • 您是否使用 django 表单从网络提交密码?
【解决方案2】:

你可以通过reqeust.data获取,一旦在DRF上解析POST body,访问body就会受到阻碍。

【讨论】:

  • 我试过了,但它说 WSGIrequest 没有属性作为数据
  • @DhruvSinghal 尝试request.data 可能是因为他的回答中有错字。
  • 不,@amadousow 我知道它应该是请求,我只尝试过
  • 在中间件中,在从视图获得响应之前,请求没有属性作为数据
猜你喜欢
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-14
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多