Создание проекта и приложения
Что мы построим
Следующие два модуля посвящены одному большому проекту — блогу. Шаг за шагом мы реализуем:
- модели постов с черновиками и публикацией;
- настроенную админку;
- списки и детальные страницы с красивыми URL;
- постраничную навигацию;
- отправку поста по email;
- комментарии и теги;
- похожие посты, собственные шаблонные теги;
- карту сайта, RSS, PostgreSQL и полнотекстовый поиск.
Потом мы добавим пользователей, REST API и выложим блог в интернет.
Окружение
mkdir blog_project
cd blog_project
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install django
pip freeze > requirements.txt
Проект и приложение
django-admin startproject mysite .
python manage.py startapp blog
blog_project/
├── manage.py
├── requirements.txt
├── mysite/
│ ├── settings.py
│ ├── urls.py
│ ├── asgi.py
│ └── wsgi.py
└── blog/
├── admin.py
├── apps.py
├── migrations/
├── models.py
├── tests.py
└── views.py
Конфигурация приложения
blog/apps.py уже содержит класс конфигурации:
from django.apps import AppConfig
class BlogConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "blog"
verbose_name = "Блог" # добавим — так раздел будет называться в админке
Подключим приложение, указав этот класс:
# mysite/settings.py
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"blog.apps.BlogConfig",
]
Можно писать просто "blog" — Django найдёт конфигурацию сам. Полный путь делает это явным.
Базовые настройки
LANGUAGE_CODE = "ru"
TIME_ZONE = "Europe/Moscow"
USE_I18N = True
USE_TZ = True
С LANGUAGE_CODE = "ru" админка, сообщения валидации и даты будут на русском.
Кратко о других важных настройках, которые понадобятся дальше:
| Настройка | Зачем |
|---|---|
DEBUG |
Подробные страницы ошибок. В продакшене — False! |
SECRET_KEY |
Ключ для подписи сессий и токенов. Хранить в секрете |
ALLOWED_HOSTS |
Домены, на которых может работать сайт (при DEBUG = False) |
DATABASES |
Подключение к БД (пока SQLite) |
STATIC_URL, STATIC_ROOT |
Статические файлы |
Первый запуск
python manage.py migrate
python manage.py runserver
Откройте http://127.0.0.1:8000/ — стартовая страница Django. Дальше начинаем описывать данные блога.
Git с первого дня
Сразу инициализируйте репозиторий и добавьте .gitignore:
venv/
__pycache__/
*.pyc
db.sqlite3
.env
git init
git add .
git commit -m "Создан проект блога"
Это пригодится и для истории изменений, и для деплоя на сервер.
Итог
- Проект
mysite, приложениеblog, подключение черезblog.apps.BlogConfig. - Язык и часовой пояс — в
settings.py. - Git — с первого коммита.
Практика решено 0 из 5
Расставьте команды для старта проекта блога в правильном порядке.
-
pip install django -
django-admin startproject mysite . -
python -m venv venv -
mkdir blog_project && cd blog_project -
python manage.py startapp blog -
source venv/bin/activate
Добавьте приложение блога в INSTALLED_APPS, указав его класс конфигурации BlogConfig
из модуля blog.apps.
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"blog.apps.BlogConfig",
]
Какие настройки стоит сразу поменять в settings.py для русскоязычного сайта?
Для чего файл apps.py в приложении?
Создайте проект mysite и приложение blog, подключите его и запустите runserver. Нажмите, когда увидите стартовую страницу Django.
Войдите, чтобы отмечать пройденные уроки.