Django 2.0 и более поздние версии теперь используют конструкторы path
func для указания URL-адресов. Я не уверен, есть ли обратная совместимость; Вы можете попробовать это на простом примере. Однако, если вы начинаете писать приложение, вы должны использовать path
:
path('api/<str:encoded_url>/', view_action)
Во избежание путаницы со стандартным путем просмотра в вашем приложении я не рекомендую использовать конвертер path
вместо str
(первый позволяет сопоставить /
, а другой - нет).
Вы можете получить дополнительную помощь по переходу с url
на path
с этой статьей .
Второй шаг, получить encoded_url
в качестве аргумента в представлении. Вам необходимо расшифровать его : чтобы передать URL-адрес внутри полученного URL-адреса, вы используете кодировку ASCII, которая заменяет некоторые зарезервированные символы другими (например, косой чертой).
Вы можете легко кодировать и декодировать URL с помощью urllib
(есть и другие модули). Для Python 3.7 синтаксис выглядит следующим образом (документы здесь)
>>> urllib.parse.quote("http://www.google.com")
'http%3A//www.google.com'
>>> urllib.parse.unquote('http%3A//www.google.com')
'http://www.google.com'
Помните: если вы передадите URL без кавычек, он не будет совпадать: вы не принимаете совпадения для слэшей с этим выражением пути. (Редактировать: метод цитаты по умолчанию не преобразует косую черту, для этого вам нужно передать: quote(<str>, safe='')
Так, например, ваш вызов GET должен выглядеть так: /api/http%3A%2F%2Fwww.google.com
. Однако лучше, если вы передадите URL-адрес в качестве параметра get и в путях, которые вам важны, только читабельность (например, /api/name_to_my_method?url=http%3A%2F%2Fwww.google.com
). Разработка пути важна для читабельности, и прохождение цитируемого URL обычно не является практикой (хотя вполне возможно).