✅ Решения: Введение в Django

⚡ Ответы на контрольные вопросы

  • Вопрос 1 (фреймворк): B
  • Вопрос 2 (install): Apip install django
  • Вопрос 3 (startproject): B — в текущей директории
  • Вопрос 4 (manage.py): A — управление задачами
  • Вопрос 5 (__init__.py): C
  • Команды: runserver → B, startapp → A, makemigrations → D, migrate → C

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

# Создаём директорию и переходим в неё
mkdir myproject
cd myproject

# Виртуальное окружение
python -m venv venv
venv\Scripts\activate   # Windows

# Устанавливаем Django
pip install django

# Проверяем версию
python -m django --version  # Должно быть 5.x

# Создаём структуру проекта
django-admin startproject config .

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

Ожидаемый результат: в терминале появятся строки:

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
...
Django version 5.x, using settings 'config.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

По адресу http://127.0.0.1:8000/ откроется страница Django с сообщением «The install worked successfully! Congratulations!».

Решение 2: Первое приложение

# Создаём приложение
python manage.py startapp myapp
# config/settings.py — регистрируем приложение
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',  # добавили
]

Важно: после добавления приложения в INSTALLED_APPS сервер должен перезапуститься автоматически. Убедитесь, что ошибок нет.

Решение 3: Первый маршрут и view

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

def index(request):
    return HttpResponse("Привет от Django!")
# myapp/urls.py — создаём новый файл
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]
# config/urls.py — подключаем маршруты myapp
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),  # добавили
]

Ожидаемый результат: http://127.0.0.1:8000/ показывает «Привет от Django!».

Решение 4: URL с параметром

# myapp/views.py — добавляем новую функцию
from django.http import HttpResponse

def index(request):
    return HttpResponse("Привет от Django!")

def item_detail(request, item_id):
    return HttpResponse(f"Товар #{item_id}")
# myapp/urls.py — добавляем маршрут
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('items/<int:item_id>/', views.item_detail, name='item-detail'),
]

Ожидаемый результат:

  • http://127.0.0.1:8000/items/42/ → «Товар #42»
  • http://127.0.0.1:8000/items/abc/ → 404 (не является целым числом)

Решение 5: Шаблон

<!-- myapp/templates/myapp/index.html -->
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Главная</title>
</head>
<body>
    <h1>{{ message }}</h1>
    <p>Добро пожаловать в мой Django-проект!</p>
</body>
</html>
# myapp/views.py — обновляем view
from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    context = {
        'message': 'Привет от Django!',
    }
    return render(request, 'myapp/index.html', context)

def item_detail(request, item_id):
    return HttpResponse(f"Товар #{item_id}")

Структура файлов:

myapp/
├── templates/
│   └── myapp/
│       └── index.html   ← шаблон здесь
├── views.py
└── urls.py

Ожидаемый результат: http://127.0.0.1:8000/ рендерит HTML-шаблон с текстом «Привет от Django!».

Почему двойная вложенность templates/myapp/? Django ищет шаблоны во всех установленных приложениях. Если два приложения имеют файл templates/index.html, возникнет конфликт. Именно поэтому принята конвенция: templates/<app_name>/template.html.