Я начинаю серию статей, посвященных разработке сайтов на Django. Вся информация, которая будет опубликована в этих статьях, собрана мной лично и на основе собственного опыта.
Для непосвященных, Django — это веб-фреймворк для создания сайтов, написанный на языке Python. Соответственно язык и является одним из основных его преимуществ, так как обеспечивает достаточно высокую производительность. На сегодняшний момент Django считается основным фреймворком Python для разработки веб-сайтов и веб-сервисов.
Для того, чтобы понимать все, что происходит в этой статье, необходимо знать основы ООП, более-менее знать Python и владеть основами работы с командной строкой (Windows или Linux, что больше нравится). В качестве дистрибутивов будут использованы Python 2.7, Django 1.5, и попеременно Ubuntu 13.10 и Windows 7. В целом информация будет применима для всех версий Django, начиная с 1.3.
Сначала нужно раздобыть дистрибутивы. Пользователи Linux могут их установить через менеджер пакетов (Django обычно называется python-django), пользователи Windows скачать Python отсюда и Django отсюда. При этом Python установится через инсталлер, а для Django придется использовать командную строку.
Распакуйте архив, перейдите в командной строке в папку с дистрибутивом и скомандуйте:
setup.py install
т.к. файлы с расширением *.py должны были зарегистрироваться при установке Python, Windows автоматически запустит найдет интерпретатор Python и запустит установку через него.
После того, как все дистрибутивы установлены, мы можем приступить к созданию нашего первого проекта на Django. Для этого существует специальная утилита django-admin.py. Для пользователей Linux она модет звучать как с расширением, так и без (зависит от дистрибутива) и скорее всего она уже зарегистрирована в PATH. Перейдите в
командной строке в каталог, где хотите создать проект и скомандуйте:
django-admin.py startproject mydjangosite
или какое-нибудь другое имя проекта, но помните, что имя должно соответствовать стандартам именования пакетов в Python, которые сходны со стандартами именования переменных.
Пользователей Windows ждет подвох, так как django-admin в PATH не зарегистрирован, и его придется запускать по полному пути. Если устанавливать все по стандартному, то он обычно располагается в папке C:\Python27\Scripts, поэтому скомандуйте:
C:\Python27\Scripts\django-admin.py startproject mydjangosite
Перейдите внутрь папки и ознакомьтесь с содержимым. Внутри неё должен лежать файл manage.py (который послужит нам заменой django-admin), и каталог с именем проекта. Будем называть текущую папку корневой и немного углубимся внутрь устройства этого фреймворка. Он состоит из ядра, вспомогательных библиотек и приложений (apps). При этом сам разработчик пишет преимущественно приложения. Все эти приложения по существу являются пакетами Python, имеют определенную структуру и обычно их размещают в корневой папке проекта (но необязательно). Сейчас у нас есть только одно приложение (скорее псевдо-приложение) — это непосредственно папка с проектом, в которой лежат файлы настроек. Лирическое отступление для обладателей Django 1.3: он каталог с проектом не создает, а помещает все настройки в корневой каталог.
Перейдем в каталог с настройками и увидим там 2 файла (вообще 3 и ещё __init__.py, но нам нужны будут 2) settings.py и urls.py. В settings.py хранятся все настройки. Откроем его (насчет открытия — можно открыть в “блокноте”, но это слишком. Для пользователей Linux рекомендую Geany или какой-нибудь другой текстовый редактор с подсветкой синтаксиса, у пользователей Windows в контекстном меню для файлов *.py должна была появится команда Open with IDLE — это специальный редактор для Python, нам его вполне хватит).
В файле мы увидим множество настроек по умолчанию (на самом деле настроек гораздо больше) но все сразу они пока что не нужны. Остановимся только на нескольких.
Сначала, для удобства, определим каталог, в котором располагается проект. Т. к. Django предпочитает работать с абсолютными путями, мы попытаемся этой “проблемы” избежать. Добавим в начало файла:
from os import path
PROJECT_DIR = path.abspath(path.dirname(__file__))
Далее создадим базу данных для нашего проекта. Django работает с множеством различных СУБД, но для простоты мы воспользуемся SQLite3. Найдем настройку DATABASES, подключим backend и пропишем путь к базе:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': path.join(PROJECT_DIR, 'db.sqlite'),
Обратите внимание на комментарий, что при использовании sqlite3 нет необходимости заполнять остальные поля. Поэтому мы их и не будем трогать.
Далее спустимся почти в самый низ файла и найдем настройку INSTALLED_APPS. Это как раз тот список приложений, которые подключены к проекту. Не стоит убирать ни одно из тех, что подлючены, но стоит подлючить новые. Для начала следует отметить, что вместе с Django поставляется ряд стандартных приложений, которые находятся в пакете django.contrib. В частности, там есть такой замечательный пакет, как django.contrib.admin, который любезно закомментирован в списке приложений (по-моему, в версии 1.6 уже нет). Он представляет из себя автоматическую админку сайта, которая очень сильно упрощает жизнь. И её надо раскомментировать.
Далее мы подключим еще одно приложение. Оно тоже штатное и называется django.contrib.flatpages. Оно служит для создания простых HTML-страниц, которые без обработки выводятся на сайт.
Итак, в конце переменной INSTALLED_APPS должны появиться два приложения:
INSTALLED_APPS = (
....
'django.contrib.admin',
'django.contrib.flatpages',
)
На этом начальная подготовка файла settings.py закончена. Теперь необходимо подготовить файл url.py. В дальнейшем в этом файле будут прописываться все URL, точнее их шаблоны, которые будет понимать Django. И к URL’ам в свою очередь будут подвязываться процедуры формирования ответа.
Раскомментируем в нем строчки:
from django.contrib import admin
admin.autodiscover()
и самый последний URL:
url(r'^admin/', include(admin.site.urls)),
Этими действиями мы подключили админку.
Прописав приложения в settings.py, мы только прописали приложения. Теперь нужно создать базу данных для этих приложений. Для этого в командной строке из корневой папки выполняем следующую команду:
manage.py syncdb
или
python manage.py syncdb
для Linux. В строке начнут появлятся сообщения о созданных таблицах базы данных. Также синхронизация попросит создать администратора сайта, отвечаем yes и вводим данные администратора.
После того, как синхронизация закончится, можно запускать так называемый сервер разработки. Вместе с Python поставляется элементарный веб-сервер, который можно активировать через Django, автоматически подвязав к нему текущий проект. Скомандуйте:
manage.py runserver
и появится сообщение о запущенном сервере. Останосить сервер можно командой Ctrl+C. Теперь можно открывать браузер.
По умолчанию сервер стартует по адресу 127.0.0.1:8000, и так как мы ещё не создали главной станицы, то сразу введем http://127.0.0.1:8000/admin/. В окне входа нужно ввести те данные, которые мы вводили при создании администратора. Перед нами предстанет список приложений. Пока что нам интересно только одно приложение — Flatpages.
Перейдем по ссылке в список страниц, нажмем Add flat page в правом углу чтобы создать новую. И заполним её так, как показано на рисунке:
и сохраним.
В поле URL указывается адрес, по которому страница будет доступна. Но если мы сейчас введем адрес http://127.0.0.1:8000/home/, то сервер ответит что страница не найдена. Нам необходимо сделать ещё несколько действий, чтобы такие страницы стали доступны.
Для начала небходимо создать шаблон страницы. Для этого внутри каталога проекта (не корневого, а того, что с settings.py) нужно создать каталог templates, внутри flatpages, и внутри файл с именем default.html со следующим содержанием:
<html><head><title>{{ flatpage.title }}</title></head><body>{{ flatpage.content }}</body></html>
Мы создали каталог шаблонов по умолчанию, теперь необходимо указать его в settings.py. Найдем настройку TEMPLATE_DIRS и пропишем там путь до каталога, относительный, по аналогии с базой данных:
TEMPLATE_DIRS = (
path.join(PROJECT_DIR, 'templates'),
)
И добавим еще одну строчку. Чтобы Django отлавливал все URL, которые присутствуют во Flatpages, необходимо подключить промежуточный обработчик (Middleware). Для этого в настройку MIDDLEWARE_CLASSES добавим следующий обработчик:
MIDDLEWARE_CLASSES = (
....
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
)
Сохраним settings.py. Перезапустим сервер (для надежности, обычно он перезапускается сам, вы при этом снова увидите в командной строке сообщение о старте сервера).
И введем в браузер http://127.0.0.1:8000/home/. Должна отобразиться созданная нами страница.
Если не отобразилась, ещё раз перепроверьте все шаги, которые необходимо было сделать.
Все, стартовый сайт на Django готов. В следующих статьях мы начнем создавать свои собственные приложения, постепенно расширяя задействуемый функционал.
31.01.2018 at 19:23
Для создания проекта из консоли windows, нужно указывать не django-admin.py а django-admin.exe. И если питон установлен в папке програм файлс, то весь путь заключить в кавычки, так как в имени каталога пробел. Например: «C:\Program Files\Python36\Scripts\django-admin.exe» startproject mydjangosite
27.09.2016 at 13:00
Большое спасибо за данный урок, все очень подробно и доступно изложено.
12.07.2015 at 19:19
Помогите решить проблему http://dpaste.com/01VEVJ7#
13.07.2015 at 08:01
Проблема с приложением django.contrib.sites. Но что конкретно, не могу сказать. Во-первых, в предыдущих версиях джанги это приложение было отключено. Поэтому, если проект начинал в версии 1.6, 1.7, то сравни свои настройки с дефолтными настройками в 1.8. Обязательно проверь настройку SITE_ID. Должна быть задана. И попробуй применить миграцию — manage.py migrate.
10.04.2015 at 21:22
В 1.8 надо добавить строку SITE_ID = 1
Спасибо автору!
10.04.2015 at 22:19
Че, вернули? Вроде с версии 1.5 не надо было в настройках ставить. Хотя это даже лучше — очень много приложений завязаны на contrib.sites.
14.09.2014 at 02:33
давно искал хороший мануал, мучился даже с первой страницей на Django, а тут все доходчиво объяснено. Жаль всего 3 урока
14.09.2014 at 11:14
Почему 3? 7 и ещё 3 по CBV
14.09.2014 at 11:53
сори, не заметил 🙂 В браузере была открыта куча других сайтов в поисках инфы. Спасибо
01.08.2014 at 12:50
для Django 1.6.5 — необходимо также добавить строку:
‘django.contrib.sites’,
в INSTALLED_APPS, иначе возникает ошибка:
CommandError: One or more models did not validate:
flatpages.flatpage: ‘sites’ has an m2m relation with model , which has either not been installed or is abstract.
01.08.2014 at 12:52
Да, эта статья для версии 1.5. В 1.6 sites убрали из дефолтного приложения, но flatpages до сих пор от него зависит.
01.08.2014 at 13:09
С вашего позволения проходясь по статье, буду комментировать проблемы встреченные с использованием 1.6 , пока попутно обучаюсь)
В частности:
Каталог Templates в 1.6.5 нужно размещать уровнем выше
🙂
01.08.2014 at 16:23
Каталог templates, во-первых, может быть не один, а во-вторых, его надо размещать там, где прописал. В 1.6 появилась дефолтная переменная BASE_DIR в настройках, которая указывает на один каталог выше
BASE_DIR = dirname(dirname(__file__)).
Раньше ее прописывали вручную и в другом виде:
BASE_DIR = abspath(dirname(__file__)).
Отсюда и данная рассогласованность, которая на самом деле рассогласованностью не является.
Я со своей стороны рекомендую использовать второй (старый) вариант, поскольку в первом случае имена каталогов с шаблонами и статиками могут начать конфликтовать с именами приложений
11.06.2014 at 23:59
Выдается ошибка в файле URLS.PY вот на этой строке : from django.contrib import admin
ставил Пайтон и Джанго не один раз. ошибка именно на этой строке. не подскажете, в чем магия? )
12.06.2014 at 01:12
Ну ошибку ты не дописал, ошибка после эксепшена идёт. А так на первый взгляд строка выглядит верно.
09.06.2014 at 16:09
Отличный цикл статей.
Спасибо за труд.
14.11.2013 at 15:52
[…] прошлой части мы запустили простой сайт на базе встроенных […]