我正在django中创建一个api,其中有一个参数(state_name(,state_name的值可以包括'&'它的价值导致了某些问题?
例如,如果我的url像
http://localhost:8080/api?state_name=jammu&kashmir&value=2
所以在上面的例子中,当我试图从url中获取值时,它只接受state_name的值'jammu',并将kashmir视为一个参数?
我能做些什么来解决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
我正在django中创建一个api,其中我有一个参数(state_name(,state_name的值可以在其值中包含
'&'
,这会导致某些问题吗?
这是毫无意义的。在查询字符串中,两个参数用符号(&
(分隔。例如:
foo=bar&qux=3
如果您希望内容包含一个与号,则需要对其进行编码,如:
?state_name=jammu%26kashmir&value=2
这里%26
是与号的编码,查询字符串有两个参数:state_name
和value
。然后将其解析为:
>>> 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'