Начинаем работу с Django

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 install welcome

Это означает, что все работает правильно и можно продолжать работу над проектом.

Настройка базы данных

Запустить сайт на базе 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

Начинаем работу с Django: 21 комментарий

  1. Привет, всем отчаянным и светлым головам, которые погрузились в мир Python и Django!

    Здравствуйте Сергей!

    Я методично и последовательно проделал все указанные здесь установки, но дойдя до создания ‘суперпользователя’ столкнулся с невозможностью ввести текст ‘пароля’ в поле ‘Password’, — курсор даже не двигается, подтверждение (Password (again)) — также не печатает. И любопытно то, что проблем нет с вводом текста в поля ‘Username’ и ‘Email address’.

    Вот так загвоздка! …

    Подскажите мне, на доступном языке, как решить подобную проблему? …

  2. Судя по всему вы не работали в линуксе
    Там на пароли курсор не должен двигаться.
    ввели пароль => enter
    подтвердили => enter
    если совпадают то все ок)

  3. Доброго времени суток.У меня такая проблема.
    После выполнения команды

    python manage.py syncdb

    система выдает следующее:
    Import Error: No module named ‘polls’.

    Все делал по инструкции,но ни в какую.
    Подскажите пожалуйста,что делать.
    А то пятый раз проект создаю и останавливаюсь на одном и том же месте.
    Заранее спасибо

    1. Скопируй еще раз это и вставь в файл 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’,
      )

  4. Подскажите, кто может, пожалуйста.
    Уже есть разработанный сайт на Джанго (файлы и база). Сейчас появилась здача поднять этот сайт на свежекупленном хостинге. Всегда работала с пхп-сайтами — там как бы все было привычно..
    Что мне необходимо поднять/установить/настроить на новом сервере.
    Заранее спасибо

    1. Ирина, на сайте есть две инструкции, как настроить сервер для Django проекта.
      Быстро:
      http://itman.in/django-webserver-nginx-uwsgi/
      и подробно:
      http://itman.in/uwsgi-python-hosting/

      Вторая не до конца переведена, однако если вы сами будете управлять сервером, я рекомендую пройтись по ней для лучшего понимания.

    1. Rosik911, скорее всего у вас более новая версия Django, чем используемая в данной статье.
      В последних версиях вместо syncdb нужно использоввть:

      python manage.py makemigrations
      # для создания миграций, которые при выполеннии внесут изменения в базу данных

      python manage.py migrate
      # для выполнения миграций.

      После этих двух команд ваша база будет соответствовать вашим моделям.

      1. но что делать, если после этих двух команд нет запроса на создание суперпользователя ?

        1. Georgy, эти две команды просто приведут базу данных в соответствие с вашими моделями.
          Для добавления суперпользователя, выполните:
          python manage.py createsuperuser

  5. localhost. Not used with sqlite3.
    ^
    SyntaxError: invalid syntax
    Помогите пожалуйста. Всё сделал как в статье.

  6. А я вот такую словил ошибку

    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.

    1. Ой, вместо
      question = models.ForeignKey(Question)
      у вас используется
      poll = models.ForeignKey(Poll)
      , но это суть не меняет и ошибка осталась.

      1. Исправил на:
        poll = models.ForeignKey(Poll, on_delete=models.SET_NULL, null=True, blank=True)
        Только после этого прошла команда
        python manage.py makemigrations app.testing

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

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