在 url 参数 DJANGO 中处理 '&'

handle '&' in url parameter DJANGO

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

例如,如果我的 url 就像

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

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

我能做些什么来解决 django 中的这个问题?

您需要转义 & 以便在 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

I am creating an api in django in which I have a parameter (state_name) and the value of state_name can include '&' in its value which is causing certain problems?

荒谬。在查询字符串中,两个参数由一个符号 分隔 (&)。例如:

foo=bar&qux=3

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

?state_name=jammu<b>%26</b>kashmir&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'