gpt4 book ai didi

python - 在 Django ("+"中测试请求参数的行为不同)

转载 作者:太空狗 更新时间:2023-10-29 21:22:06 26 4
gpt4 key购买 nike

我有一个 Django View ,它使用查询参数来进行一些内容过滤。像这样:

/page/?filter=one+and+two
/page/?filter=one,or,two

我注意到 Django 将 + 转换为空格(request.GET.get('filter') 返回 one 和 two ),我对此表示同意。我只需要相应地调整我在 View 中使用的 split() 函数。

但是……

当我尝试测试这个 View 时,我调用:

from django.test import Client
client = Client()
client.get('/page/', {'filter': 'one+and+two'})

request.GET.get('filter') 返回 one+and+two:带有加号且没有空格。这是为什么?

我想 Client().get() 模仿浏览器行为,所以我想了解的是为什么调用 client.get('/page/' , {'filter': 'one+and+two'}) 不像浏览到 /page/?filter=one+and+two出于测试目的,我认为它应该是相同的,并且在这两种情况下, View 都应该接收一致的过滤器值:无论是使用 + 还是使用空格。 p>

我不明白为什么会有两种不同的行为。

最佳答案

查询字符串中的加号是正常且正确的空格编码。这是一件历史文物; form value encoding for URLs与编码 URL 中的其他元素略有不同。

Django 负责将查询字符串解码回键值对;该解码包括解码 URL 百分比编码,其中 + 被解码为空格。

使用测试客户端时,您传入未编码的数据,因此您将使用:

client.get('/page/', {'filter': 'one and two'})

然后为您将其编码为查询字符串,随后在您尝试访问参数时再次解码。

关于python - 在 Django ("+"中测试请求参数的行为不同),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29703930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com