Django — один из самых эффективных современных фреймворков для разработки веб-проектов. Сложно придумать что-то, позволяющее так же быстро реализовать портал или контентный проект, чем использовать Django. Причина подобной эффективности — четкий механизм работы с проектом, удобная ORM — система моделей для упрощения использования базы данных, встроенный функциональный движок шаблонов. Приведенная в статье информация актуальна для версии Django 1.5. Приступим.
Содержание
Создание виртуального окружения
При работе над новым сайтом очень удобным инструментом являются виртуальные окружения. Виртуальное окружение — это независимый от установленных в системе набор библиотек, модулей и самого интерпретатора Python, которые используются при работе с текущим проектом. Создаем виртуальное окружение командой
mkvirtualenv mysite
Эта команда создаст и активирует виртуальное окружение с названием mysite. В дальнейшем активируйте его командой
workon mysite
Установка Django
Установка Django очень проста. Чтобы установить последнюю версию Django, выполните команду
pip install django
Создание проекта
Создание проекта выполняется командой
django-admin.py startproject mysite
В результате выполнения команды в текущем каталоге будет создан каталог mysite, в котором будет размещены manage.py — скрипт для управления Django-проектом и каталог mysite, содержащий файлы
__init__.py settings.py urls.py wsgi.py
Структура проекта Django
Верхний каталог mysite/ созданный командой startproject, никак не используется Django и не прописан в файлах конфигурации. Вы можете свободно переименовать его и сайт будет работать как и раньше.
manage.py - Это скрипт для запуска различных команд Django. Например, с его помощью можно запустить тестовый веб-сервер или создать нужные для работы проекта таблицы в базе данных.
Внутренний каталог mysite/ — это пакет Python, созданный Django для вашего проекта. Его имя нужно указывать для импорта находящихся в нем файлов. Напрмер, для импорта настроек проекта нужно указать import mysite.settings.
mysite/__init__.py: — пустой файл, указывающий на то, что каталог является пакетом Python.
mysite/settings.py
mysite/urls.py: —
mysite/wsgi.py: — начальная точка для запуска сайта веб-сервером.
При создании в дальнейшем с помощью startapp приложений, работающих в рамках сайта, для каждого из них будет создан отдельный каталог в верхнем mysite.
Запуск веб-сервера для разработки
Django предоставляет удобный механизм, позволяющий при разработке веб-сайта не заниматься настройкой веб-сервера. В состав Django уже включен веб-сервер, который вызывается командой
python manage.py runserver
После запуска этой команды в консоли из каталога проекта и перехода по адресу http://127.0.0.1:8000/ вы увидите следующий вывод:
Это означает, что все работает правильно и можно продолжать работу над проектом.
Настройка базы данных
Запустить сайт на базе Django можно и без базы данных. Но в реальном проекте без нее не обойтись.
Для настройки базы данных в начале разработки проще всего использовать SQLite3. Сама база при этом хранится в одном файле на диске. SqLite не стоит использовать в рабочих сайтах с реальной нагрузкой, но вполне можно для тестирования и разработки функционала.
Для подключения базы данных к Django проекту отредактируйте в файле mysite/settings.py блок DATABASES
Чтобы использовать sqlite, достаточно указать django.db.backends.sqlite3 в качестве ENGINE и прописать имя файла, в котором будет хранится база, в параметре NAME.
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'mysite.db', 'USER': '', # Not used with sqlite3. 'PASSWORD': '', # Not used with sqlite3. 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '', # Set to empty string for default. Not used with sqlite3. } }
Настройка временной зоны
Для указания в Django правильной временной зоны нужно отредактировать параметр TIME_ZONE.
Открываем в браузере http://en.wikipedia.org/wiki/List_of_tz_zones_by_name, выбираем ту зону, в которой будет находится ваш сервер и копируем в settings.py
Для Украины я использовал Europe/Kiev
Приложения Django
Мы уже создали наш проект, зачем нам еще нужны приложения?
Приложение создается для выполения определенной специфической задачи.
В свою очередь, проект — набор приложений, полностью реализующих работу сайта.
Например, реализуя сайт крупной туристической компании, мы можем добавить в наш проект отдельное приложение, отдельное — для блога, и дополнительное приложение для каталога стран или туров.
Для начала работы с Django мы создадим сайт, позволяющий создавать опросы.
Создадим приложение, которое будет отвечать работе опросов с названием polls:
python manage.py startapp polls
В появившемся каталоге pools мы увидим
__init__.py models.py tests.py views.py
Модели Django
Модель полностью определяет данные, с которыми нам нужно работать, и предоставляет методы по работе с ними в приложении. Django ORM позволяет в простых случаях полностью абстрагироваться от структуры базы данных, предоставив самой Django создать нужные нам таблицы, записывать в них информацию, которую мы сохраняем и находить то, что мы ищем.
В нашем простом приложении мы добавим две модели.
Poll — будет хранить в себе вопрос и дату публикации опроса.
Choice будет содержать вариант для голосования и счетчик голосов, отданных данному варианту. Каждый вариант будет привязан к какому-то вопросу.
Чтобы создать нужные нам структуры для хранения данных, нам нужно отредактировать файл polls/models.py и добавить в него следующий текст:
from django.db import models class Poll(models.Model): question = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') class Choice(models.Model): poll = models.ForeignKey(Poll) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)
Чтобы Django создала нужные для работы приложения таблицы в базе данных, нужно включить наше приложение в список INSTALLED_APPS файла settings.py. Отредактируйте файл и добавьте в конец списка ‘polls’,
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', # Uncomment the next line to enable the admin: # 'django.contrib.admin', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', 'polls', )
Теперь Django знает о созданном вами приложении. Чтобы создать таблицы, выполните команду
python manage.py syncdb
После первого запуска syncdb вы должны увидеть следующее:
Creating tables ... Creating table auth_permission Creating table auth_group_permissions Creating table auth_group Creating table auth_user_groups Creating table auth_user_user_permissions Creating table auth_user Creating table django_content_type Creating table django_session Creating table django_site Creating table polls_poll Creating table polls_choice You just installed Django's auth system, which means you don't have any superusers defined. Would you like to create one now? (yes/no):
django успешно создала все нужные таблицы для приложений, указанных в INSTALLED_APPS, и интересуется, нужно ли создать супер-пользователя, который будет управлять работой сайта через админку Django.
Давайте сделаем это!
Username (leave blank to use 'sharm'): admin Email address: i@admin.com Password: Password (again): Superuser created successfully. Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s)
Теперь давайте попробуем запустить наш проект и добавить в него немного данных.
Шаг 2 — запускаем первый проект на Django
Привет, всем отчаянным и светлым головам, которые погрузились в мир Python и Django!
Здравствуйте Сергей!
Я методично и последовательно проделал все указанные здесь установки, но дойдя до создания ‘суперпользователя’ столкнулся с невозможностью ввести текст ‘пароля’ в поле ‘Password’, — курсор даже не двигается, подтверждение (Password (again)) — также не печатает. И любопытно то, что проблем нет с вводом текста в поля ‘Username’ и ‘Email address’.
Вот так загвоздка! …
Подскажите мне, на доступном языке, как решить подобную проблему? …
Всё правильно
оно специально не видно
Судя по всему вы не работали в линуксе
Там на пароли курсор не должен двигаться.
ввели пароль => enter
подтвердили => enter
если совпадают то все ок)
Доброго времени суток.У меня такая проблема.
После выполнения команды
python manage.py syncdb
система выдает следующее:
Import Error: No module named ‘polls’.
Все делал по инструкции,но ни в какую.
Подскажите пожалуйста,что делать.
А то пятый раз проект создаю и останавливаюсь на одном и том же месте.
Заранее спасибо
Скопируй еще раз это и вставь в файл settings.py
у меня тоже такая ошибка выходила, перепроверила, оказывается одну строчку забыла
INSTALLED_APPS = (
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.sites’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
# Uncomment the next line to enable the admin:
# ‘django.contrib.admin’,
# Uncomment the next line to enable admin documentation:
# ‘django.contrib.admindocs’,
‘polls’,
)
Я думаю у вас не та версия Django установлена
Подскажите, кто может, пожалуйста.
Уже есть разработанный сайт на Джанго (файлы и база). Сейчас появилась здача поднять этот сайт на свежекупленном хостинге. Всегда работала с пхп-сайтами — там как бы все было привычно..
Что мне необходимо поднять/установить/настроить на новом сервере.
Заранее спасибо
Сервер вдс с вожможностью работать под рутом
Как вариант, можно взять VDS на DigitalOcean и при запуске сервера выбрать вариант с предустановленными сервисами для хостинга Django
Ирина, на сайте есть две инструкции, как настроить сервер для Django проекта.
Быстро:
http://itman.in/django-webserver-nginx-uwsgi/
и подробно:
http://itman.in/uwsgi-python-hosting/
Вторая не до конца переведена, однако если вы сами будете управлять сервером, я рекомендую пройтись по ней для лучшего понимания.
Unknown command: ‘syncdb’
Type ‘manage.py help’ for usage.
у меня вот так ругаеться.
Rosik911, скорее всего у вас более новая версия Django, чем используемая в данной статье.
В последних версиях вместо syncdb нужно использоввть:
python manage.py makemigrations
# для создания миграций, которые при выполеннии внесут изменения в базу данных
python manage.py migrate
# для выполнения миграций.
После этих двух команд ваша база будет соответствовать вашим моделям.
но что делать, если после этих двух команд нет запроса на создание суперпользователя ?
Georgy, эти две команды просто приведут базу данных в соответствие с вашими моделями.
Для добавления суперпользователя, выполните:
python manage.py createsuperuser
почитал про джанго и питон. всё же склоняюсь к пхп (ИИай2)
localhost. Not used with sqlite3.
^
SyntaxError: invalid syntax
Помогите пожалуйста. Всё сделал как в статье.
А я вот такую словил ошибку
D:\tmp\marina>python manage.py makemigrations app.testing
File "D:\tmp\marina\app\testing\models.py", line 9, in
class Choice(models.Model):
File "D:\tmp\marina\app\testing\models.py", line 10, in Choice
question = models.ForeignKey(Question)
TypeError: __init__() missing 1 required positional argument: 'on_delete'
Поставил django под python 3.6.6.
Ой, вместо
question = models.ForeignKey(Question)
у вас используется
poll = models.ForeignKey(Poll)
, но это суть не меняет и ошибка осталась.
Исправил на:
poll = models.ForeignKey(Poll, on_delete=models.SET_NULL, null=True, blank=True)
Только после этого прошла команда
python manage.py makemigrations app.testing
Нужен django структура проекта