python
March 8, 2019

Python. Django. Настройка программы для создания сайта #0

Начинаю цикл статей по Django. По шагам опишу создание полностью функционального web-сайта.

Django — свободный фреймворк для веб-приложений на языке Python, использующий шаблон проектирования MVC. Проект поддерживается организацией Django Software Foundation. Сайт на Django строится из одного или нескольких приложений, которые рекомендуется делать отчуждаемыми и подключаемыми.

Веб-фреймворк Django используется в таких крупных и известных сайтах, как Instagram, Disqus, Mozilla, The Washington Times, Pinterest, YouTube, Google и др.

Требования для начала:

Что бы успешно справляться с материалом, и усваивать его, вы должны:

  • Иметь представление о программировании в целом
  • Знать базовый синтаксис языка программирования Python
  • Знать базовые принципы HTML + CSS
  • Скачать и установить на компьютер интерпретатор Python
  • Скачать и установить IDE (Я настоятельно рекомендую PYCharm CE)

В этом уроке мы:

  • Установим виртуальное окружение
  • Создадим django проект
  • Создадим django приложение
  • Немного поработает с маршрутизацией и функциями - обработчиками
  • Запустим свой первый сайт на Django

Создаем виртуальное окружение:

Виртуальное окружение - это контейнер в вашем компьютере. Необходимо оно для изоляции версий друг от друга, для удобства и переноса проекта на другие компьютеры / операционные системы. Например, мы пишем приложение на django 2, и у нас на компьютере установлен django 2. Но тут нам достаётся проект на django 1, который не поддерживает django 2. Одновременно установить их тоже не получается. Тогда на помощь приходит виртуальная среда. Мы просто создаём независимый контейнер, ставим туда django нужной версии, и разрабатываем наше приложение в этом контейнере. На нашей основной системе, изменения в контейнере никак не отобразятся.

Я использую виртуальное окружение virtualenv. Установить его легко. (У вас должен быть установлен pip. Это менеджер пакетов для python. Для простоты понимания - это как AppStore, только консольный, и для программиста :) Pip по умолчанию ставится вместе с python). Открывает терминал (командную строку) и пишем:

pip install virtualenv

Ждём. После успешной установки, у нас есть 2 способа создать виртуальное окружение. Рекомендую сейчас использовать второй. Первый описан для ознакомления.

  1. Создаём папку, где будет наш проект. Открывает терминал. Пишем команды:
virtualenv my_venv
cd my_venv/Scripts
activate
cd ../..

Где my_venv - имя нашего виртуального окружения. Нашими командами мы создали контейнер с именем my_venv, перешли в папку my_venv/Scripts и активировали окружение. После чего, вышли обратно, в корневую директорию проекта. Кстати там же, в папке Scripts есть файл deactivate, который выключает нашу среду. Теперь, если всё правильно сделали, в терминале мы видим:

(my_venv) C:\Users\admin\Desktop\ITPavel_Project\>

Вместо:

C:\Users\admin\Desktop\ITPavel_Project\>

Это означает что виртуальное окружение запущено

2. Открывает PyCharm, жмём File - New Project, в открывшемся окне прописываем путь к нашей созданной папке под проект, разворачиваем дополнительные опции, и в них выбираем:

  • Виртуальная среда - virtualenv
  • Интерпретатор Python 3.7
  • И делаем так, что бы папка нашего сайта, лежала РЯДОМ с папкой виртуального окружения. (выделил на скриншоте)
  • После нажатия Create, PyCharm всё сделает за вас, и уже запустит виртуальное окружение

Работаем с Django

После того, как виртуально окружение запущено, пора установить в него Django, с помощью pip.

pip install django

Ждём, пока фреймворк установится. После этого в нашей папке запускаем проект Django. Я делаю это через терминал PyCharm, но можно и в командной строке:

django-admin startproject itpavel

Внутри C:\Users\admin\Desktop\ITPavel Project\project, создалась папка itpavel (потому что именно такое название мы прописали в командной строке). В этой папке у нас есть файл manage.py и каталог itpavel.

manage.py - это единый контрольный центр. С помощью него мы будем делать миграции, работать с моделями, запускать наш сервер. Это главный файл нашего приложения.

В каталоге itpavel лежат файлы:

  • __init__.py - нужен для того, что бы python видел эту папку как package и мог её импортировать. Например мы пишем несколько сайтов, на каждом из них должна быть реализована авторизация и регистрация. Написав это один раз, мы можем наш код, не переписывать, а как модуль импортировать. Это очень удобное и универсальное решение. Вообще, в Django есть принцип DRY (англ. Don't repeat yourself). Принцип DRY формулируется как: «Каждая часть знания должна иметь единственное, непротиворечивое и авторитетное представление в рамках системы». Проще говоря, не повторяй самого себя! :)
  • settings.py - настройки проекта. Сюда мы будем подключать созданные приложения, тут задаётся язык проекта, время, включается/отключается режим дебага и многое другое. Лучше рассмтрим всё это на практике.
  • urls.py - маршрутизация. Т.е. пути. Например у нас есть сайт www.example.com, в urls, мы прописываем логику. Что произойдёт, если обратимся к www.example.com/admin или www.example.com/home

С этим разобрались. Теперь пора создать приложение, отрисовывающее нашу главную страницу. Заходим в папку, где лежит manage.py и даём терминалу команду:

manage.py startapp home_page

Где home_page - имя нашего приложения. Создался каталог home_page, с файлами и папкой migrations. Она необходима для работы с базой данных ( в дальнейшем БД).

Пишем код

Открываем файл urls.py (из папки itpavel) в редакторе IDE

В самом верху, есть комментарий, стоит его прочитать. В нашем случае подходит последний пункт, так как я хочу что бы при обращении на мой сайт /home, срабатвало приложение home_page.

Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))

Для этого, по инструкции, импортируем include и добавляем ещё одну строку, в список urlpatterns:

from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('home/', include('home_page.urls'))
]

Этим мы чётко указали, что если идёт обращение к /home, перенаправлять в файл urls.py, из папки home_page

Отлично. Теперь открываем файл urls.py из папки нашего приложения (home_page) (если нету, создаём этот файл) и прописываем там логику: "если обращаются ко мне, вызывать функцию home из views. Так же, имя для этой функции будет 'home'." И не забываем импортировать views.py:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home')
]

Отлично, осталось создать саму функцию, во views.py:

from django.shortcuts import render


def home(request):
    return render(request, 'home.html')

Мы импортировали render, этот модуль обрабатывает html код и выдаёт нам готовую страницу на выходе. Функция home принимает request (о нём позже посмотрим на практике), возвращает с помощью render страничку, описанную в home.html (которого у нас нет!). Исправляем это. В папке home_page создаём каталог templates (именно там django автоматически ищет все html шаблоны). В этой директории создаём наш файл home.html с самым простым содержимым:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ITPavel</title>
</head>
<body>
    <h1>Это главная страница</h1>
</body>
</html>

Осталось прописать в файл settings из папки нашего проекта, что мы хотим подключить наше приложение home_page. В конец списка INSTALLED_APPS добавляем имя нашего приложения (home_page):

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'home_page',
]

Осталось проверить. В папке с файлом manage.py даём команду терминалу:

manage.py migrate
manage.py runserver

Этими командами мы выполнили миграции (об этом подробнее будет статья) и запустили наш сервер. Теперь, открыв в браузере адрес http://127.0.0.1:8000/home мы увидим рабочий наш шаблончик home.html. Обратите внимание что этот сайт доступен только с вашего компьютера. Как сделать вседоступный сайт, узнаем позже!

Заключение:

Мы написали свой веб-сервер, в виртуальном окружении со следующей логикой: при обращении к http://127.0.0.1:8000/home/, проект отправляет нас в приложение home_page, оно же, в свою очередь, вызывает функцию home, которая отрисовывает и возвращает нам наш сайт. Картинку сайта и древо папок (что и где лежит), прилагаю ниже, для тех, кто запутался :)

Всем спасибо за внимание, увидимся в следующих уроках!