Создание сайта на Python/Django: Views

В предыдущей части мы познакомились с Django Admin и разобрались как его активировать. Мы подключили модель Question и разобрали базовые функции редактирования. В будущих публикациях я еще вернусь к вопросу админ панели и расширения её функционала. Пока же начнем создавать первые Views (представления) для нашего сайта.

Views отвечают за обработку и передачу данных и могут реализовывать одну или несколько функций. Данные, как правило, передаются в специальный шаблон. Такой шаблон (Template) является частью интерфейса.

Примером Views может быть homepage (index) – главная страница с перечнем публикаций или, как в нашем приложении, перечнем вопросов. Отдельным View может быть details page (страница деталей) для каждого отдельного вопроса, где будут отображен перечень вариантов ответов и другие связанные данные. Так же необходимо реализовать отдельный view для страницы результатов (results page). Обработчик голосования, т.е. функция, которая сохраняет выбор пользователя, тоже помещается в отдельный View.

В Django представления views являются своеобразными доставщиками контента от модели к шаблону отображения. Реализуются простыми функциями и методами языка Python. Взаимодействие с View происходит путем анализа части адресной строки, после основного домена. Например: /archive/<year>/<month>/<day>/ . Настройка и взаимодействие между URL и Views происходит при помощи «URLconfs».

Создаем больше Views

Давайте добавим несколько View в наше приложение и заставим его выводить что-то в браузер.

# polls/views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse("Привет. Вы на главной странице приложения Polls.")

def detail(request, question_id):
    return HttpResponse("Вопрос под номером %s." % question_id)

def results(request, question_id):
    response = "Ответы на вопрос под номером %s."
    return HttpResponse(response % question_id)

def vote(request, question_id):
    return HttpResponse("Вы отвечаете на вопрос под номером %s." % question_id)

Чтобы эти Views работали, необходимо включить их в polls.urls используя метод path().

from django.urls import path
from . import views

urlpatterns = [
    # ex: /polls/
    path('', views.index, name='index'),
    # ex: /polls/2/
    path('<int:question_id>/', views.detail, name='detail'),
    # ex: /polls/2/results/
    path('<int:question_id>/results/', views.results, name='results'),
    # ex: /polls/2/vote/
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

Таким образом настраивается соответствие запросов из адресной строки браузера с конкретным обработчиком из views.py. Первый аргумент функции path() принимает шаблон запроса, согласно которому будет производится обработка и перенаправление на соответствующий view, который задан вторым аргументом. Третий аргумент не является обязательным, но его лучше указать. Позже разберемся почему.

Теперь, если вы запустите сервер и откроете браузер, то указав в строке запроса, например, “/polls/2/vote/” вы должны увидеть текст “Вы отвечаете на вопрос под номером 2.”

Обратите внимание на шаблоны запросов, которые содержат символы “<” и “>”. Это переменная часть запроса, которая обрабатывается согласно указанному между данными символами правилу. Там, например, <int:question_id> означает, что в запросе будет целое число int, которое необходимо присвоить переменной
question_id, которую необходимо передать в качестве аргумента в функцию view.

Пишем Views, которые будут делать что-то полезное

Пока для примера наши views выводят только небольшой текст, но не делают ничего полезного. Пора это исправить. Следующим этапом будем реализовывать базовый функционал для обработки и вывода вопросов, вариантов ответов, процесса голосования и просмотра результатов.

Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.