如何在 Django 测试客户端中保持 POST 参数的顺序?

Posted

技术标签:

【中文标题】如何在 Django 测试客户端中保持 POST 参数的顺序?【英文标题】:How to keep order of POST parameters in Django test client? 【发布时间】:2018-03-20 15:23:10 【问题描述】:

我正在为 Django 视图编写单元测试,我的单元测试中有这个:

data_from_paypal_other_id = 'client_id': '1', 'receiver_email': 'badguy@example.com', 'amount': '1.5'
self.client.post(reverse('paypal_ipn_listener'), data=data_from_paypal_other_id)

问题是 PayPal 要求我以特定顺序发送带有参数的 POST 请求。 Don't ask me why, see this.

Django 测试客户端我看到参数乱序:

--BoUnDaRyStRiNg
Content-Disposition: form-data; name="receiver_email"

badguy@example.com
--BoUnDaRyStRiNg
Content-Disposition: form-data; name="amount"

1.5
--BoUnDaRyStRiNg
Content-Disposition: form-data; name="client_id"

1
--BoUnDaRyStRiNg--

注意receiver_emailclient_id 之前跳转。

我的问题是如何强制 Django 测试客户端保持参数的顺序?

【问题讨论】:

尝试使用 OderdedDict docs.python.org/2/library/… 【参考方案1】:

使用collections.OrderedDict 而不是dict 应该可以解决问题。确保使用 sequence 而不是原始字典对其进行初始化,例如:

from collections import OrderedDict

data_from_paypal_other_id = OrderedDict([
    ('client_id', '1'), ('receiver_email', 'badguy@example.com'),
    ('amount', '1.5')])

【讨论】:

以上是关于如何在 Django 测试客户端中保持 POST 参数的顺序?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用测试客户端填写 Django 表单

django post请求 403错误解决方法

django post请求 403错误解决方法

如何使用 django-rest-framework 测试客户端测试二进制文件上传?

Django中的JSONField即使在POST请求后仍保持为空

如何在单元测试中使用 django 序列化程序