Почему функция в views.py требует параметра запроса в этом случае в Django?

#python #django #django-views #django-request

#python #django #django-представления #django-запрос

Вопрос:

В url.py Я настроил новый путь в главном списке urlpatterns:

 path('ko/', views.ko),
  

Я узнал, что мне нужно написать эту функцию в views.py для запуска веб-страницы:

  def ko(request):
    return HttpResponse("It's a page")
  

Мой вопрос в том, почему функция не работает, когда я оставляю параметр пустым вместо запроса?:

 def ko():
     return HttpResponse("It's a page")
  

Запуск страницы, когда я удаляю параметр запроса, выдает ошибку типа:ko() принимает 0 позиционных аргументов, но был задан 1.

Если у меня нет ввода запроса при вызове функции views.ko, тогда почему параметр запроса необходим при написании начальной функции, что делает параметр запроса и куда этот параметр запроса переходит? Каковы ее атрибуты? Я был бы очень признателен за подробный ответ о его качествах.

Ответ №1:

Функция просмотра, или сокращенно view, — это функция Python, которая принимает веб-запрос и возвращает веб-ответ. Таким образом, каждое представление должно принимать request параметр.

request Объект содержит метаданные о запросе, например, какой метод HTTP-запроса использовался, IP-адрес клиента и т.д. Вы найдете список HttpRequest здесь

Также из документации.

Как только один из шаблонов URL совпадает, Django импортирует и вызывает заданное представление, которое является функцией Python (или представлением на основе класса). Представлению передаются следующие аргументы:

Экземпляр HttpRequest.

Если соответствующий шаблон URL не содержал именованных групп, то совпадения из регулярного выражения предоставляются в качестве позиционных аргументов.

Аргументы ключевого слова состоят из любых именованных частей, которым соответствует предоставленное выражение path, переопределяемых любыми аргументами, указанными в необязательном аргументе kwargs для django.urls.path() или django.urls.re_path().

Комментарии:

1. Как объект Httprequest, представленный как ‘request’, обрабатывается в выводе объекта Httpresponse? Я понимаю, что параметр запроса представляет объект, но у меня возникают проблемы с пониманием того, как обрабатывается этот ввод, когда у меня нет никакого кода, написанного явно о запросе в вышеупомянутой функции ko ().

2. HttpResponse — это ответственность вашей функции. Запрос здесь просто для того, чтобы предоставить вам информацию на случай, если она вам понадобится для построения вашего ответа. Это нормально, чтобы не использовать его.

Ответ №2:

Каждая функция просмотра принимает объект HttpRequest в качестве своего первого параметра, который обычно называется request