обрабатывать '&' в параметре URL DJANGO - PullRequest
0 голосов
/ 01 ноября 2018

Я создаю API в django, в котором у меня есть параметр (имя_состояния), а значение имя_состояния может включать в себя значение & &, что вызывает определенные проблемы?

Например, если мой URL похож на

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

так что в приведенном выше примере, когда я пытаюсь получить значения из URL-адреса, он принимает значение state_name only 'jammu' и рассматривает kashmir как параметр?

Что я могу сделать, чтобы решить эту проблему в Django?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Я создаю API в django, в котором у меня есть параметр (имя_состояния), и значение имя_состояния может включать в себя значение '&', что вызывает определенные проблемы?

Это бессмысленно . В строке запроса два параметра разделены амперсандом (&). Например:

foo=bar&qux=3

Если вы хотите, чтобы содержимое содержало амперсанд, вам нужно кодировать его, например:

?state_name=jammu<b>%26</b>kashmir&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'
0 голосов
/ 01 ноября 2018

Вам нужно экранировать & для использования в параметрах запроса 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
...