JavaRush /Курсы /Модуль 3: Django /Создание функций представлений

Создание функций представлений

Модуль 3: Django
3 уровень , 1 лекция
Открыта

Добро пожаловать на лекцию о создании функций представлений в Django.

Сегодня мы углубимся в практическую часть работы с представлениями, рассмотрим, как они создаются, регистрируются и взаимодействуют с клиентскими запросами. Но прежде чем начинать, давайте коротко вспомним, что мы изучили до этого.

Краткое содержание предыдущих лекций

Ранее мы познакомились с основами Django: установили проект, настроили виртуальное окружение и изучили структуру проекта. Вы уже узнали, как запускается локальный сервер, что делает файл manage.py, и как создавать новое приложение. На последней лекции мы обсудили, что такое представления (views), разобрались с их ролью в обработке запросов и узнали, что представления бывают двух типов: функциональные (FBV) и классовые (CBV). Сегодня мы сосредоточимся на создании функциональных представлений.

Основы создания функций представлений

Что такое функция представления?

Функция представления (function-based view, FBV) — это функция Python, которая принимает HTTP-запрос (объект HttpRequest) и возвращает HTTP-ответ (объект HttpResponse). Представления отвечают за обработку входящих запросов и генерацию ответа пользователю. Они — мост между запросом клиента и логикой вашего приложения.

Проще говоря:

  • Клиент делает запрос. Например: "Эй, сервер, покажи мне главную страницу!"
  • Сервер отправляет запрос в представление.
  • Представление обрабатывает запрос и возвращает ответ, например: "Вот тебе главная страница, дружище!"

Простейшее представление

Давайте напишем самое простое представление, которое возвращает текстовый ответ:

# views.py
from django.http import HttpResponse

def simple_view(request):
    return HttpResponse("Привет! Это мое первое представление.")

Здесь:

  • simple_view — это наша функция представления.
  • request — объект, представляющий клиентский HTTP-запрос.
  • HttpResponse — объект, который мы возвращаем клиенту. Он содержит наш ответ: строку "Привет! Это мое первое представление."

Регистрация функции представления

Созданное представление ничего не знает о запросах до тех пор, пока мы не свяжем его с URL. Для этого используется файл urls.py.

Пример:

# urls.py
from django.urls import path
from . import views  # Импортируем наше представление

urlpatterns = [
    path('', views.simple_view, name='home'),  # Связываем URL с представлением
]

Здесь:

  • path() связывает URL-адрес (в данном случае пустой путь, /) с функцией представления simple_view.
  • name='home' — именованный маршрут, который мы можем использовать для получения ссылки на этот путь в шаблонах.

Теперь, если вы откроете в браузере http://127.0.0.1:8000/, вы увидите наш текст "Привет! Это мое первое представление".

Примеры простых функций представлений

Возврат HTML-ответа

Давайте усложним задачу и вернем не только текст, но и HTML-страницу:

# views.py
def html_view(request):
    html_content = "<h1>Добро пожаловать на мой сайт!</h1><p>Это пример представления, которое возвращает HTML.</p>"
    return HttpResponse(html_content)

Теперь внесем новый маршрут в urls.py:

# urls.py
urlpatterns = [
    path('html/', views.html_view, name='html_view'),
]

Если вы откроете в браузере http://127.0.0.1:8000/html/, то увидите страницу с заголовком и текстом!

Работа с параметрами в запросах

Иногда нам нужно принимать параметры от пользователя. Например, приветствовать его по имени:

# views.py
def greet_user(request, name):
    return HttpResponse(f"<h1>Привет, {name}!</h1><p>Рад вас видеть.</p>")

В файл urls.py добавляем маршрут с динамическим параметром:

# urls.py
urlpatterns = [
    path('greet/<str:name>/', views.greet_user, name='greet_user'),
]

Теперь, если вы зайдете на http://127.0.0.1:8000/greet/Алексей/, увидите сообщение: "Привет, Алексей! Рад вас видеть." Параметр <str:name> позволяет передавать строку в нашу функцию представления.

Обработка ошибок и возврат статус-кодов

Возвращаем статус-коды

Иногда сервер должен вернуть не только текст, но и определенный HTTP-статус-код. Например, при ошибке:

# views.py
def error_view(request):
    return HttpResponse("Что-то пошло не так!", status=500)

Здесь мы возвращаем статус 500 (Server Error), что говорит о том, что на сервере что-то сломалось. Вы можете указать любой статус-код, например 404, 403 и т.д.

Обработка ошибок 404

В Django удобно обрабатывать ошибки 404, если пользователь зашел на несуществующую страницу. Для этого можно использовать специальное представление:

# views.py
from django.http import Http404

def page_not_found_view(request):
    raise Http404("Такой страницы не существует!")

При возникновении ошибки 404 Django покажет стандартную страницу "404 Not Found".

Бонус: работа с методами HTTP-запросов

Вы можете проверять метод запроса, чтобы по-разному обрабатывать GET и POST:

# views.py
def method_view(request):
    if request.method == 'GET':
        return HttpResponse("Это GET-запрос")
    elif request.method == 'POST':
        return HttpResponse("Это POST-запрос")
    else:
        return HttpResponse(f"Метод {request.method} не поддерживается.", status=405)

Добавляем маршрут:

# urls.py
urlpatterns = [
    path('method/', views.method_view, name='method_view'),
]

Теперь:

  • http://127.0.0.1:8000/method/ с методом GET вернет: "Это GET-запрос".
  • Если отправить POST-запрос, вы получите: "Это POST-запрос".

Типичные ошибки и советы

  1. Не забывайте регистрировать представления в urls.py. Часто бывает так, что вы написали представление, но забыли создать для него маршрут. Проверьте список маршрутов, если ваша страница не работает.

  2. Следите за именами функций. Функции представлений не должны иметь одинаковые имена, иначе возникнет конфликт.

  3. Используйте именованные маршруты. Это сделает ваш код более читаемым и облегчит изменения в будущем.

  4. Не игнорируйте статус-коды. Корректные статус-коды помогают понять, что происходит на сервере. Например, возвращайте 404 для несуществующих страниц, а 405 для неподдерживаемых методов запросов.

Пример: простое веб-приложение с несколькими маршрутами

Давайте объединим все выученное в одном мини-приложении:

# views.py
from django.http import HttpResponse, Http404

def home(request):
    return HttpResponse("Главная страница: Добро пожаловать!")

def greet_user(request, name):
    return HttpResponse(f"<h1>Привет, {name}!</h1>")

def not_found(request):
    raise Http404("Эта страница не найдена!")

def method_view(request):
    if request.method == 'GET':
        return HttpResponse("Это GET-запрос")
    elif request.method == 'POST':
        return HttpResponse("Это POST-запрос")
    else:
        return HttpResponse("Метод не поддерживается.", status=405)
# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
    path('greet/<str:name>/', views.greet_user, name='greet_user'),
    path('error/', views.not_found, name='not_found'),
    path('method/', views.method_view, name='method_view'),
]

 

Теперь у нас есть:

  • Главная страница.
  • Приветствие пользователя.
  • Обработка ошибок 404.
  • Пример работы с методами HTTP.

Запустите сервер, протестируйте приложение и наслаждайтесь результатами!

1
Задача
Модуль 3: Django, 3 уровень, 1 лекция
Недоступна
Формирование ответа HTML
Формирование ответа HTML
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Андрей Уровень 58
25 мая 2025
Очень было бы здорово в самом начале лекции, подчеркнуть, что надо создать приложение в django....думаю будет полезно