【发布时间】:2018-03-20 18:14:57
【问题描述】:
我正在尝试按照它们在 Django 中接收到的确切顺序获取 POST 数据参数。
我的views.py有这个:
@require_POST
@csrf_exempt
def paypal_ipn_listener(request):
print request.POST
print request.body
request.POST 中的数据在QueryDict 中,这是无序的,因此不适合我的需求。
尝试访问request.body会抛出异常:
RawPostDataException: You cannot access body after reading from request's data stream
我认为这个异常的发生是因为我的 @require_POST 或 @csrf_exempt 装饰器可能调用了一些读取 POST 数据流的中间件。
无论如何,我的问题是如何按确切顺序获取 HTTP 请求 POST 数据?
我需要保持订单以满足PayPal IPN implementation requirements。
** 更新 **
我最终手动解析了request.body,因为没有更好的解决方案。
【问题讨论】:
-
您收到该错误是因为您访问了
request.POSTfirst。如果您删除该行,您将不会收到错误消息。 -
@DanielRoseman 好主意,但我删除了第一个打印件,但仍然出现同样的错误。
-
@DanielRoseman 经过进一步测试,似乎是这样。发布为答案,我会接受。