按照传递的顺序检索URL参数-Django

问题描述

我正在尝试按手动传递的顺序检索传递给函数的URL参数。 这很重要的原因是它的支付提供商集成,它通过将传递的值(按传递的顺序)进行连接来计算哈希值。 因此,基于此,我需要按参数在实际URL中传递的顺序访问它们,将它们连接起来,然后添加对我的帐户保密的MD5密钥以验证请求。

例如: http://example.com/order/callback?date=20200101&currency=USD&txnid=1234567&hash=thegeneratedhas

如果我通过request.GET访问请求,我将得到命令dict。

代码

def callback(request):
  keys_concatenated = ""
  for value in request.GET:
    if value == "hash":
      pass
    else:
      keys_concatenated = keys_concatenated + request.GET[value]

这将生成一个字符串,例如:USD202001011234567 由提供者生成的保留订单的哈希值,因此期望该值 20200101USD1234567

我并不是真的想要在urls.py中定义参数,因为支付提供商公开表示它们可能会更改传递的参数,因此会破坏实现。 我也不知道他们不时传递的实际顺序。

解决方法

您可以使用python内置的urllib.parse并解析URL参数,同时保持其顺序。

一个简单的例子:

>>> from urllib.parse import parse_qsl
>>> parse_qsl('date=20200101&currency=USD&txnid=1234567&hash=thegeneratedhas')
[('date','20200101'),('currency','USD'),('txnid','1234567'),('hash','thegeneratedhas')]
>>>