В настоящее время я определяю регулярные выражения для захвата параметров в URL-адресе, как описано в руководстве. Как мне получить доступ к параметрам из URL как части HttpRequest
объекта? Мой в HttpRequest.GET
настоящее время возвращает пустой QueryDict
объект.
Я хотел бы научиться делать это без библиотеки, чтобы я мог лучше узнать Джанго.
self.kwargs['parameter']
Чтобы уточнить объяснение Camflan, давайте предположим, что у вас есть
url(regex=r'^user/(?P<username>\w{1,50})/$', view='views.profile_page')
http://domain/user/thaiyoshi/?message=Hi
Правило диспетчера URL будет захватывать части пути URL (здесь
"user/thaiyoshi/"
) и передавать их функции просмотра вместе с объектом запроса.Строка запроса (здесь
message=Hi
) анализируется и параметры сохраняются в качествеQueryDict
инrequest.GET
. Дальнейшее сопоставление или обработка параметров HTTP GET не производится.Эта функция просмотра будет использовать как части, извлеченные из пути URL, так и параметр запроса:
В качестве примечания вы найдете метод запроса (в данном случае
"GET"
и обычно для отправленных форм"POST"
) вrequest.method
. В некоторых случаях полезно проверить, что оно соответствует ожидаемому.Обновление: при принятии решения о том, использовать ли путь URL или параметры запроса для передачи информации, может помочь следующее:
/blog/post/15/
(не/blog/posts/?id=15
)/blog/post/15/?show_comments=1
или/blog/posts/2008/?sort_by=date&direction=desc
/blog/post/2008/09/30/django-urls/
источник
Используя GET
Использование POST
источник
KeyError
исключений в случае отсутствия ключа. Было бы разумно сделать то же самое (напримерrequest.POST.get('id', '')
).источник
Для ситуаций, когда у вас есть только тот
request
объект, который вы можете использоватьrequest.parser_context['kwargs']['your_param']
источник
Я хотел бы добавить некоторые варианты себя, здесь. Кто-то хотел бы знать, как установить путь в urls.py, например,
чтобы мы могли вызвать запрос.
Дело в том, что НЕ нужно устанавливать такой маршрут в urls.py. То, что вам нужно установить, это просто маршрут в urls.py
и когда вы вводите HTTP: // имя_сервера: порт / домен / поиск / д = CA . Часть запроса '? Q = CA' будет автоматически зарезервирована в хеш-таблице, на которую вы можете ссылаться
Вот пример (views.py)
Кроме того, когда вы пишете строку запроса в URL
Не заключайте строку запроса в кавычки, например
источник
Я хотел бы поделиться советом, который может сэкономить вам время.
Если вы планируете использовать что-то подобное в своем
urls.py
файле:Что в основном означает
www.example.com/<username>
. Обязательно поместите его в конце ваших записей URL, потому что в противном случае, он склонен вызывать конфликты с записями URL , которые следуют ниже, то есть доступ к одному из них будет давать вам ошибку приятно:User matching query does not exist.
я только что пережил это сам; Надеюсь, поможет!
источник
У вас есть два распространенных способа сделать это, если ваш URL выглядит так:
v1:
Если конкретный ключ является обязательным, вы можете использовать:
Это вернет значение
a
если ключ существует, и исключение, если нет.v2:
Если ваши ключи не являются обязательными:
Вы можете попробовать это без каких-либо аргументов, это не даст сбой. Таким образом, вы можете обернуть его
try: except:
и вернутьсяHttpResponseBadRequest()
в пример. Это простой способ сделать ваш код менее сложным, без использования специальной обработки исключений.источник
Это не совсем то , что вы просили, но этот фрагмент является полезным для управления
query_strings
вtemplates
.источник
Эти запросы в настоящее время выполняются двумя способами. Если вы хотите получить доступ к параметрам запроса (GET), вы можете запросить следующее:
Если вы хотите получить доступ к параметрам, переданным POST, вам нужно получить доступ к этому способу:
Получая доступ к словарю (QueryDict) с помощью get (), вы можете установить значение по умолчанию. В вышеупомянутых случаях, если «статус» или «роль» не сообщаются, значения равны None.
источник
Это еще одно альтернативное решение, которое может быть реализовано:
в конфиге URL. :
во взглядах:
источник