【问题标题】:How to get HTTP POST parameters in exact order in Django?如何在 Django 中按确切顺序获取 HTTP POST 参数?
【发布时间】: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 经过进一步测试,似乎是这样。发布为答案,我会接受。

标签: python django rest paypal


【解决方案1】:

如果你删除 @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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多