Задание 1: Создание Django-проекта
Логика: Сначала создаём виртуальное окружение и устанавливаем Django. Команда django-admin startproject config . создаёт папку config/ с файлами настроек прямо в текущей директории (точка = «здесь»).
# Шаг 1: Создать проект в PyCharm: File → New Project → Create
# (или создать папку вручную)
# Шаг 2: Установить Django
pip install django
# Шаг 3: Создать структуру проекта
django-admin startproject config .
После выполнения появятся: папка config/ с settings.py, urls.py, wsgi.py, asgi.py, и файл manage.py в корне.
Задание 2: Вынос SECRET_KEY в .env
Логика: Создаём файл .env вручную в корне (рядом с manage.py). Копируем значение SECRET_KEY из settings.py в .env. Устанавливаем django-environ для чтения.
# .env
SECRET_KEY=django-insecure-ваш-секретный-ключ-из-settings.py
pip install django-environ
.env в .gitignore: этот файл нельзя публиковать.
Задание 3: Считывание SECRET_KEY в settings.py
Логика: Импортируем Env из environ, создаём экземпляр, вызываем Env.read_env() чтобы загрузить .env файл. Путь к .env строим относительно BASE_DIR, чтобы код работал на любой машине.
# config/settings.py
from pathlib import Path
from environ import Env
BASE_DIR = Path(__file__).resolve().parent.parent
env = Env()
Env.read_env(BASE_DIR / '.env')
SECRET_KEY = env('SECRET_KEY')
Задание 4: Запуск сервера
Логика: Команда runserver запускает встроенный dev-сервер Django. По умолчанию — порт 8000. Стандартная стартовая страница подтверждает, что проект создан корректно.
python manage.py runserver
Откройте http://127.0.0.1:8000/ в браузере. Вы увидите зелёную страницу «The install worked successfully! Congratulations!».
Задание 5: DEBUG и ALLOWED_HOSTS в .env
Логика: DEBUG=True включает подробные сообщения об ошибках (только для разработки). ALLOWED_HOSTS — список хостов, с которых Django принимает запросы. env.bool() и env.list() автоматически конвертируют строки из .env в нужные типы Python.
# .env (дополнение)
DEBUG=True
ALLOWED_HOSTS=127.0.0.1,localhost
# config/settings.py
DEBUG = env.bool('DEBUG', default=False)
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=[])
Задание 6: Настройки MySQL в .env
Логика: Все чувствительные данные подключения к БД (логин, пароль, хост) тоже хранятся в .env. Переменная MYSQL=True будет флагом переключения.
# .env (дополнение)
MYSQL=True
DB_NAME=django_project
DB_USER=username
DB_PASSWORD=password
DB_HOST=localhost
DB_PORT=3306
Задание 7: Условный выбор базы данных
Логика: Читаем флаг MYSQL как bool. Если True — используем MySQL-бэкенд с параметрами из .env. Если False — SQLite (встроена в Python, не требует установки сервера). Сначала устанавливаем драйвер mysqlclient.
pip install mysqlclient
# config/settings.py
if env.bool('MYSQL', default=False):
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': env('DB_NAME'),
'USER': env('DB_USER'),
'PASSWORD': env('DB_PASSWORD'),
'HOST': env('DB_HOST'),
'PORT': env('DB_PORT'),
},
}
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
},
}
Задание 8: Создание и регистрация приложения first_app
Логика: startapp создаёт папку first_app/ со всеми нужными файлами. Без регистрации в INSTALLED_APPS Django «не знает» о приложении и не будет искать его шаблоны, модели и URL-конфиги. Рекомендуется указывать полный путь к AppConfig.
python manage.py startapp first_app
# config/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Наше приложение
'first_app.apps.FirstAppConfig',
]
Задание 9: Первое представление (view)
Логика: View в Django — это функция (или класс), которая принимает объект request и возвращает объект HttpResponse. Самый простой способ вернуть HTML — передать строку в HttpResponse.
# first_app/views.py
from django.http import HttpResponse
def first_view(request):
return HttpResponse("<h1>Hello! It's my first view!</h1>")
Задание 10: URL-маршрут к view
Логика: Создаём новый файл first_app/urls.py (его не существует после startapp — нужно создать вручную). Используем path() — современный способ Django 2.x+. Параметр name позволяет ссылаться на URL по имени в шаблонах.
# first_app/urls.py (новый файл — создать вручную)
from django.urls import path
from . import views
urlpatterns = [
path('first/', views.first_view, name='first_view'),
]
Задание 11: Подключение маршрутов к проекту
Логика: Корневой urls.py проекта должен знать о маршрутах приложения. Функция include() подключает все URL из указанного модуля. Пустой префикс '' означает, что маршруты first_app подключаются с корня сайта — итоговый URL будет /first/.
# config/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('first_app.urls')), # подключение маршрутов приложения
]
Проверка: перейдите на http://127.0.0.1:8000/first/ — должен появиться заголовок «Hello! It's my first view!».