✅ Решения всех 11 задач

⚡ Решения — кратко

# Задание 1
pip install django
django-admin startproject config .

# Задание 2 (.env)
SECRET_KEY=your-secret-key
pip install django-environ

# Задание 3 (settings.py)
from environ import Env
env = Env(); Env.read_env(BASE_DIR / '.env')
SECRET_KEY = env('SECRET_KEY')

# Задание 4
python manage.py runserver

# Задание 5
DEBUG=True; ALLOWED_HOSTS=127.0.0.1,localhost
DEBUG = env.bool('DEBUG'); ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')

# Задание 8
python manage.py startapp first_app
INSTALLED_APPS = [..., 'first_app.apps.FirstAppConfig']

# Задание 9-11: view + urls.py

Задание 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!».