🏠 Домашнее задание 7

📋 Урок 13: Введение в Django 🎯 Сложность: Начальная

⚡ Что нужно сделать

  1. Создать Django-проект, установить django-environ.
  2. Вынести SECRET_KEY, DEBUG, ALLOWED_HOSTS в .env.
  3. Добавить поддержку MySQL через переменную MYSQL=True/False в .env.
  4. Создать приложение, зарегистрировать, написать view «Hello, <ваше_имя>».
  5. Подключить URL-маршрут, запустить сервер, зафиксировать requirements.txt.
  6. Запушить в Git и прислать ссылку на репозиторий.

Текст задания из LMS

Вам необходимо самостоятельно создать Django проект и добавить его в Git.

Создание проекта:

  • Создайте новый Python проект.
  • Установите фреймворк Django.
  • Создайте структуру Django проекта с помощью команды в консоли.

Настройка переменных окружения:

  • Создайте файл .env в корне проекта и добавьте переменные SECRET_KEY, DEBUG и ALLOWED_HOSTS.
  • Установите библиотеку django-environ для работы с переменными окружения.
  • Считайте переменные SECRET_KEY, DEBUG и ALLOWED_HOSTS из .env файла в settings.py.

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

  • Добавьте в .env файл настройки для подключения к MySQL.
  • Реализуйте в settings.py возможность выбора между SQLite и MySQL в зависимости от переменной MYSQL в .env файле.

Создание и регистрация приложения:

  • Создайте новое приложение в вашем проекте Django.
  • Зарегистрируйте приложение в настройках проекта (settings.py).

Реализация представления и маршрута:

  • Определите простое представление, которое будет возвращать заголовком текст «Hello, <your_name>».
  • Определите URL-маршрут к вашему представлению внутри приложения.
  • Подключите маршруты вашего приложения к основному файлу urls.py проекта.

Тестирование:

  • Запустите локальный сервер и перейдите по созданному URL-адресу для проверки корректности реализации.

Фиксация зависимостей:

  • Зафиксируйте текущие версии всех зависимостей в файле requirements.txt.

Git:

  • Запуште проект в git репозиторий и прикрепите как решение ссылку на него.

Подготовка окружения

Шаг 1: Создание папки и виртуального окружения

# Создаём папку проекта
mkdir django-hw7
cd django-hw7

# Создаём виртуальное окружение
python -m venv venv

# Активируем (Windows)
venv\Scripts\activate

# Проверяем, что окружение активировано (должно быть (venv))
# (venv) C:\...> 

Шаг 2: Установка зависимостей

# Основные пакеты
pip install django django-environ

# Если планируете MySQL (опционально — для тестирования)
pip install mysqlclient  # или PyMySQL
⚠️ Проверить по документации Пакет mysqlclient требует установленных системных библиотек MySQL. На Windows без MySQL Server установленного возможны ошибки компиляции. Альтернатива — использовать PyMySQL с настройкой в __init__.py. Подробности: pypi.org/project/mysqlclient

Шаг 3: Создание Django-проекта

# Создаём структуру проекта (точка = в текущей папке)
django-admin startproject config .

# Создаём приложение
python manage.py startapp myapp

Шаг 4: Создание .env файла

# .env — создаём в корне проекта (рядом с manage.py)
SECRET_KEY=django-insecure-your-very-secret-key-change-this-in-production
DEBUG=True
ALLOWED_HOSTS=localhost,127.0.0.1

# Настройки MySQL (используются при MYSQL=True)
MYSQL=False
DB_NAME=mydatabase
DB_USER=root
DB_PASSWORD=yourpassword
DB_HOST=localhost
DB_PORT=3306
Важно! Добавьте .env в .gitignore, чтобы не публиковать секретный ключ в репозитории:
# .gitignore
.env
venv/
__pycache__/
*.pyc
db.sqlite3

Пошаговое решение

1. Настройка settings.py с django-environ

Связь с теорией: settings.py — BASE_DIR, DATABASES, DEBUG

# config/settings.py
from pathlib import Path
import environ

# Инициализируем environ
env = environ.Env(
    DEBUG=(bool, False)   # тип и значение по умолчанию
)

BASE_DIR = Path(__file__).resolve().parent.parent

# Читаем .env файл
environ.Env.read_env(BASE_DIR / '.env')

# Безопасность — из .env
SECRET_KEY = env('SECRET_KEY')
DEBUG = env('DEBUG')
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=['localhost', '127.0.0.1'])

2. Настройка базы данных: SQLite или MySQL

# config/settings.py — добавляем после ALLOWED_HOSTS

# Выбор базы данных через переменную MYSQL в .env
USE_MYSQL = env.bool('MYSQL', default=False)

if USE_MYSQL:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': env('DB_NAME'),
            'USER': env('DB_USER'),
            'PASSWORD': env('DB_PASSWORD'),
            'HOST': env('DB_HOST', default='localhost'),
            'PORT': env('DB_PORT', default='3306'),
        }
    }
else:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
        }
    }

3. Регистрация приложения в INSTALLED_APPS

Связь с теорией: INSTALLED_APPS в settings.py

# config/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',  # регистрируем приложение
]

4. View с приветствием

Связь с примерами: Пример 3: Простое view

# myapp/views.py
from django.http import HttpResponse

def hello(request):
    # Замените "YourName" на своё имя
    return HttpResponse("<h1>Hello, YourName</h1>")

5. URL-маршрут в приложении

Связь с теорией: urls.py в структуре проекта

# myapp/urls.py — создать новый файл
from django.urls import path
from . import views

urlpatterns = [
    path('hello/', views.hello, name='hello'),
]

6. Подключение маршрутов к корневому urls.py

# config/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),  # подключаем маршруты myapp
]

7. Применение миграций и запуск сервера

# Применяем начальные миграции (создаёт таблицы auth, sessions, admin)
python manage.py migrate

# Запускаем сервер
python manage.py runserver

Перейдите на http://127.0.0.1:8000/hello/ — должно отобразиться «Hello, YourName».

8. Фиксация зависимостей

# Создаём requirements.txt
pip freeze > requirements.txt

Файл будет содержать что-то вроде:

asgiref==3.8.1
Django==5.0.6
django-environ==0.11.2
sqlparse==0.5.0

9. Git: инициализация и публикация

# Инициализируем репозиторий
git init

# Создаём .gitignore (если ещё не создан)
# Добавляем .env, venv/, __pycache__/, db.sqlite3

# Добавляем файлы
git add .
git commit -m "feat: initial Django project with .env configuration"

# Создаём репозиторий на GitHub и добавляем remote
git remote add origin https://github.com/yourusername/django-hw7.git
git push -u origin main

Проверка в VS Code

Запуск сервера через терминал VS Code

  1. Откройте папку проекта: File → Open Folder...
  2. Откройте терминал: Terminal → New Terminal или Ctrl+`
  3. Активируйте venv: venv\Scripts\activate
  4. Запустите сервер: python manage.py runserver
  5. Нажмите Ctrl + клик по ссылке в терминале или откройте браузер вручную

Настройка launch.json для Django в VS Code

Файл .vscode/launch.json позволяет запускать Django сервер через F5 и использовать точки останова (breakpoints).

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Django: runserver",
      "type": "debugpy",
      "request": "launch",
      "program": "${workspaceFolder}/manage.py",
      "args": ["runserver"],
      "django": true,
      "justMyCode": true
    }
  ]
}

Создайте файл .vscode/launch.json с этим содержимым, затем нажмите F5 — сервер запустится в режиме отладки.

Использование точек останова

  1. Откройте myapp/views.py.
  2. Кликните слева от номера строки в теле функции hello — появится красная точка (breakpoint).
  3. Нажмите F5 для запуска в режиме отладки.
  4. Перейдите на http://127.0.0.1:8000/hello/ — выполнение остановится на точке останова.
  5. В панели Variables можно изучить значения переменных (request.method, request.GET и т.д.).
  6. Нажмите F5 снова или F10 (step over) для продолжения.
Расширение Python в VS Code должно быть установлено. Если нет: откройте Extensions (Ctrl+Shift+X), найдите «Python» от Microsoft, установите. Также рекомендуется расширение «Django» для подсветки шаблонов DTL.

Итоговая структура проекта

django-hw7/
├── .env                  ← переменные окружения (в .gitignore)
├── .gitignore
├── .vscode/
│   └── launch.json       ← конфигурация отладки
├── config/
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py       ← настройки с django-environ
│   ├── urls.py           ← корневые маршруты
│   └── wsgi.py
├── myapp/
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations/
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   ├── urls.py           ← маршруты приложения (создан вручную)
│   └── views.py          ← view hello()
├── manage.py
├── requirements.txt
└── venv/                 ← в .gitignore

Чеклист перед сдачей

  • Django-проект создан: manage.py, config/, myapp/ присутствуют
  • Файл .env существует и содержит SECRET_KEY, DEBUG, ALLOWED_HOSTS
  • .env добавлен в .gitignore (не должен попасть в репозиторий)
  • В settings.py используется django-environ для чтения переменных
  • Реализован выбор БД: SQLite (MYSQL=False) или MySQL (MYSQL=True)
  • 'myapp' присутствует в INSTALLED_APPS
  • View hello возвращает «Hello, <your_name>»
  • myapp/urls.py создан и подключён через include()
  • Сервер запускается: python manage.py runserver без ошибок
  • URL http://127.0.0.1:8000/hello/ возвращает нужный текст
  • Файл requirements.txt сгенерирован командой pip freeze
  • Проект запушен в Git-репозиторий