如何在Django中以正确的顺序获取HTTP POST参数?
问题描述:
我正在尝试按照它们在Django中收到的确切顺序获取POST数据参数。如何在Django中以正确的顺序获取HTTP 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
因为没有更好的解决办法。
答
如果你删除@require_POST,做这样的事情?:
from django.http import Http404
@csrf_exempt
def paypal_ipn_listener(request):
if request.method != 'POST':
raise Http404('some error')
print request.body
因为你访问'request.POST'你得到这个错误*第一个*。如果您删除了该行,则不会收到错误消息。 –
@DanielRoseman好主意,但我删除了第一印,我仍然得到相同的错误。 –
@DanielRoseman经过进一步的测试,似乎是这样。作为回答发布,我会接受它。 –