Обработка адресов готова: при запросе к URL, описанному в urlpatterns
, будет вызван обработчик для этого запроса, а если адрес запроса не найден в списке — пользователю вернётся ошибка Error 404.Но пока нет обработчиков, ничего не будет, так что следующий этап — настройка обработчиков. Обработчики — это view-функции или view-классы. Их хранят в файле views.py.
Объект запроса и объект ответа
View-функции принимают на вход объект запроса HttpRequest. В нём содержатся данные о запросе: например, запрошенный URL, тип запроса и многое другое.Возвращают view-функции объект ответа HttpResponse — он содержит всю информацию, которую должен получить веб-клиент: код ответа сервера, код HTML-страницы и другую полезную для клиента информацию. Детально познакомиться с этими объектами можно в документации Django:
Сейчас проект «Анфиса для друзей» умеет обрабатывать такие адреса:
# ice_cream/urls.py
from django.urls import path
from . import views
urlpatterns = [
# Главная страница
path('', views.index),
# Страница со списком мороженого
path('ice_cream/', views.ice_cream_list),
# Страница с информацией об одном сорте мороженого;
# в качестве параметра ожидает целое положительное число или 0
path('ice_cream/<int:pk>/', views.ice_cream_detail),
]
Самые простые view-функции для этих адресов могут быть такими:
# ice_cream/views.py
from django.http import HttpResponse
# Главная страница
def index(request):
return HttpResponse('Главная страница')
# Страница со списком мороженого
def icecream_list(request):
return HttpResponse('Список мороженого')
# Страница с информацией об одном сорте мороженого;
# view-функция принимает параметр pk из path()
def icecream_detail(request, pk):
return HttpResponse(f'Мороженое номер {pk}')
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/ice_cream/number/
Using the URLconf defined in anfisa.urls,
Django tried these URL patterns, in this order:
ice_cream/
ice_cream/<int:pk>/
admin/
The current path, ice_cream/number/, didn't match any of these.
You're seeing this error because you have DEBUG = True
in your Django settings file.
Change that to False, and Django will display a standard 404 page.