处理网址参数DJANGO

时间:2018-11-01 11:46:42

标签: python django rest django-rest-framework urlencode

我正在django中创建一个api,其中我有一个参数(state_name),并且state_name的值中可以包含“&”,这会引起某些问题?

例如,如果我的网址是

http://localhost:8080/api?state_name=jammu&kashmir&value=2

所以在上面的示例中,当我尝试从url中获取值时,它仅采用state_name的值“ jammu”并将喀什米尔视为参数?

我该如何解决django中的此问题?

2 个答案:

答案 0 :(得分:5)

您需要转义&以便在http查询参数中使用。

http://localhost:8080/api?state_name=jammu%26kashmir&value=2

如果您是从其他Python脚本发布此内容,则可以使用urllib.parse.quote函数为您完成此操作:

from urllib import parse
parse.quote("jammu&kashmir") # jammu%26kashmir

答案 1 :(得分:1)

  

我正在django中创建一个api,其中我有一个参数(state_name),并且state_name的值可以在其值中包含'&',这会引起某些问题?

这是荒谬的。在查询字符串中,两个参数用&符号(&分隔 。例如:

foo=bar&qux=3

如果您希望内容包含一个&符号,则需要对其进行编码,例如:

?state_name=jammu%26kashmir&value=2

此处%26是“&”号的编码,然后 querystring 具有两个参数:state_namevalue。然后将它们解析为:

>>> from django.http import QueryDict
>>> QueryDict('state_name=jammu%26kashmir&value=2')
<QueryDict: {'state_name': ['jammu&kashmir'], 'value': ['2']}>

您可以使用QueryDict来构造这样的查询,例如:

>>> qd = QueryDict(mutable=True)
>>> qd['state_name'] = 'jammu&kashmir'
>>> qd['value'] = '2'
>>> qd.urlencode()
'state_name=jammu%26kashmir&value=2'