【问题标题】:Retrieving URL parameters in the order they are passed - django按传递的顺序检索 URL 参数 - django
【发布时间】:2020-10-25 18:45:22
【问题描述】:

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

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

如果我通过 request.GET 访问请求,我会得到有序的字典。

伪代码

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 中定义参数并不是我真正想要的,因为支付提供商公开表示他们可能会更改传递的参数,因此会破坏实现。 我也不知道他们不时传递它的实际顺序。

【问题讨论】:

  • 您最好通过查询参数或 kwargs 获取您想要的参数。这样你就可以轻松得到你想要的。
  • 如果您可以访问 GET URL 字符串并按? 拆分,您可能可以这样做。现在你得到了确切的请求 URL,它是按照它们被接收的顺序。根据经验,通过对象访问参数将为您提供有序的字典。

标签: python django django-urls path-parameter


【解决方案1】:

您可以使用 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')]
>>>

【讨论】:

    猜你喜欢
    • 2014-03-22
    • 2021-01-05
    • 1970-01-01
    • 2016-09-03
    • 2023-03-04
    • 2021-09-12
    • 2015-11-13
    • 1970-01-01
    • 2021-11-19
    相关资源
    最近更新 更多