Создание сайта на Python/Django: запуск первого приложения

В прошлой публикации мы установили Django и настроили первый проект на нем. Пора переходить к более серьёзным моментам и начинать свое первое приложение, которое будет что-то выполнять, сохранять, выводить. Разработка сайтов процесс не простой, но очень интересный и увлекательный.

Создаем первое приложением в проекте на Django

Для создания нового приложения внутри проекта необходимо войти в директорию проекта mysite и затем выполнить команду:

python manage.py startapp polls

Это создаст каталог polls внутри проекта, который содержит файлы приложения.

Новое приложение Django внутри проекта

Пишем первый View

В Django View отвечает за сбор и обработку данных с целью последующего вывода или передачи в шаблон вывода. Для начала давайте поступим проще и создадим первый View который просто будет выводить некоторый приветственный текст и будем усложнять его уже по мере доработки приложения. Для этого скопируйте следующий код и вставьте его в файл polls/views.py:

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

Чтобы этой код заработал, нам необходимо создать файл urls.py и добавить в него код, который будет сообщать Django о том, какой View необходимо вызывать при вводе определенного адреса. Добавим в polls/urls.py следующий код:

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]

В данном случае мы настроили паттерн внутри самого приложения, но в проекте есть корневой обработчик URLconf, которому следует сообщить, что у нас в проекте есть приложение polls и необходимо включить его urlpatterns в обработку. Для этого в файл mysite/urls.py добавляем следующий код:

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', admin.site.urls),
]

Он включит информацию из polls.urls в обработку URLconfs и мы сможем обратится к приложению polls через браузер, указав «/polls/» после основного адреса. Давайте проверим это, запустив наш сервер и открыв ссылку http://127.0.0.1:8000/polls/. Если вы все сделали правильно, то должны увидеть в браузере текст, который был указан в HttpResponse():

Вывод первого Django View в браузереЕсли нет, то смотрите на лог сервера в терминале что пошло не так и исправляйте ошибки, чтобы добиться нужного вывода.

Что произошло?

Возможно, вы не совсем поняли, что делает тот код, который мы добавили в наш проект выше. Давайте коротко разберем порядок его выполнения.

Корневой обработчик URL в Django анализирует файл mysite/urls.py на наличие паттернов для обработки. В нашем случае мы добавили функцию url() в которой в качестве параметров задали регулярное выражение для поиска совпадения запроса из браузерной строки. В данном случае это «/polls/». Таким образом, определив, что в браузере был введен запрос типа «имя сайт.ком/polls/» дальнейшая обработка перенаправляется на polls.urls, т.е. urls.py из приложения polls. 

В urls.py приложения polls мы создали паттерн, регулярное выражение которого соответствует любому запросу r’^$’. Как результат, независимо от того, что будет введено в строке браузера после «/polls/», все запросы будут перенаправляться на View с именем index, который мы описали в файле views.py нашего приложения polls.

В результате обработки запроса будет вызвана функция index(request), которая в нашем случае всего лишь вернет HttpResponse(«Hello, world. You’re at the polls index.»), результатом которого будет вывод текста «Hello, world. You’re at the polls index.» в окне браузера.

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

Приятого кодинга на Python!

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *