Django – мощный веб-фреймворк

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение в Django

Django — это полнофункциональный веб-фреймворк на языке Python, разработанный для быстрого и безопасного создания веб-приложений. Он обеспечивает разработчику структуру, основанную на принципе "не повторяй себя" (DRY), и предоставляет мощные инструменты, такие как ORM, маршрутизация, админка, шаблоны и система аутентификации из коробки. Django подходит как для небольших сайтов, так и для сложных корпоративных решений.


Архитектура и особенности Django

  • MTV-подход: Model-Template-View

  • ORM: работа с базой данных через Python-классы

  • Встроенная админка: автоматическое создание интерфейса управления данными

  • Безопасность: защита от XSS, CSRF, SQL-инъекций

  • Масштабируемость и производительность

  • Многофункциональность: поддержка REST API, аутентификации, миграций, мультиязычности


Установка и создание проекта

Установка Django:

bash
pip install django

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

bash
django-admin startproject myproject cd myproject python manage.py runserver

Приложение будет доступно по адресу: http://127.0.0.1:8000/


Структура проекта Django

После создания проекта структура будет следующей:

markdown
myproject/ │ ├── manage.py ├── myproject/ │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ ├── wsgi.py │ └── asgi.py
  • manage.py — интерфейс командной строки

  • settings.py — конфигурация проекта

  • urls.py — маршруты

  • wsgi.py/asgi.py — точка входа для серверов


Создание и настройка приложений

Создание нового приложения:

bash
python manage.py startapp blog

Добавление в INSTALLED_APPS в settings.py:

python
INSTALLED_APPS = [ ..., 'blog', ]

Маршруты и диспетчеризация URL

В urls.py проекта:

python
from django.urls import path, include urlpatterns = [ path('blog/', include('blog.urls')), ]

В blog/urls.py:

python
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), ]

Работа с моделями и ORM

Модель в models.py:

python
from django.db import models class Post(models.Model): title = models.CharField(max_length=200) content = models.TextField()

Применение миграций:

bash
python manage.py makemigrations python manage.py migrate

Административная панель

В admin.py:

python
from django.contrib import admin from .models import Post admin.site.register(Post)

Создание суперпользователя:

bash
python manage.py createsuperuser

Админка доступна по адресу: http://127.0.0.1:8000/admin/


Работа с шаблонами и HTML

Создание шаблона templates/blog/index.html:

html
<h1>{{ post.title }}</h1> <p>{{ post.content }}</p>

В views.py:

python
from django.shortcuts import render from .models import Post def index(request): posts = Post.objects.all() return render(request, 'blog/index.html', {'posts': posts})

Обработка форм и данных от пользователя

Использование встроенной формы:

python
from django import forms class PostForm(forms.ModelForm): class Meta: model = Post fields = ['title', 'content']

Обработка в views.py:

python
def create_post(request): form = PostForm(request.POST or None) if form.is_valid(): form.save() return redirect('index') return render(request, 'blog/form.html', {'form': form})

Работа с файлами и медиа

В settings.py:

python
MEDIA_URL = '/media/' MEDIA_ROOT = BASE_DIR / 'media'

URL-конфигурация:

python
from django.conf import settings from django.conf.urls.static import static urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Аутентификация и авторизация

Django предоставляет систему пользователей:

  • Регистрация

  • Вход/выход

  • Разграничение прав (login_required, @permission_required)

  • Группы и разрешения


Создание REST API с Django REST Framework

Установка:

bash
pip install djangorestframework

Добавление в INSTALLED_APPS:

python
'rest_framework',

Создание сериализатора:

python
from rest_framework import serializers from .models import Post class PostSerializer(serializers.ModelSerializer): class Meta: model = Post fields = '__all__'

Создание API-представления:

python
from rest_framework import viewsets class PostViewSet(viewsets.ModelViewSet): queryset = Post.objects.all() serializer_class = PostSerializer

Middleware и обработка запросов

Middleware — это обработчики запросов/ответов:

python
def simple_middleware(get_response): def middleware(request): response = get_response(request) return response return middleware

Подключение в settings.py в MIDDLEWARE.


Тестирование приложений

Создание тестов:

python
from django.test import TestCase from .models import Post class PostModelTest(TestCase): def test_str(self): post = Post(title="Test", content="Test content") self.assertEqual(str(post), post.title)

Запуск:

bash
python manage.py test

Развёртывание Django-проекта

Варианты:

  • Gunicorn + Nginx

  • Docker-контейнер

  • Heroku, Railway, Render

  • AWS, GCP, Azure


Примеры практического применения Django

  • Корпоративные порталы и CRM-системы

  • Новостные сайты и блоги

  • Электронная коммерция

  • REST API для мобильных приложений

  • Образовательные платформы и LMS

  • Бэкенд систем машинного обучения


Часто задаваемые вопросы

Что такое Django?

Полноценный фреймворк для создания веб-приложений на Python.

Чем отличается Django от Flask?

Django — фреймворк "из коробки", включающий все основные компоненты. Flask — микрофреймворк с минимальной базой.

Какие базы данных поддерживает Django?

SQLite, PostgreSQL, MySQL, Oracle.

Подходит ли Django для REST API?

Да, особенно с использованием Django REST Framework.

Поддерживает ли Django асинхронность?

С версии 3.1 — частичная поддержка ASGI и async views.

Полный справочник по ключевым функциям и модулям фреймворка Django для Python

Установка

bash
pip install django

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

bash
django-admin startproject myproject cd myproject python manage.py runserver

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

bash
python manage.py startapp myapp

Структура проекта Django

Компонент Назначение
models.py Описание структуры БД (ORM-модели).
views.py Обработка логики и запросов.
urls.py Маршруты URL для проекта и приложений.
templates/ HTML-шаблоны.
static/ Статические файлы (CSS, JS, изображения).
admin.py Настройка интерфейса администратора.
apps.py Конфигурация приложения.
migrations/ Хранение миграций базы данных.

Основные команды manage.py

Команда Назначение
runserver Запуск локального сервера.
startapp <name> Создание нового приложения.
makemigrations Создание миграций из моделей.
migrate Применение миграций к БД.
createsuperuser Создание администратора.
shell Запуск интерактивной оболочки с загрузкой Django.
collectstatic Сборка всех статических файлов.

Модели (models.py)

python
from django.db import models class Post(models.Model): title = models.CharField(max_length=100) content = models.TextField() created = models.DateTimeField(auto_now_add=True)
Поле Назначение
CharField(max_length) Строка фиксированной длины.
TextField() Длинный текст.
IntegerField() Целое число.
DateTimeField(auto_now_add=True) Дата и время создания.
BooleanField(default=False) Логическое значение.
ForeignKey(...) Связь "многие к одному".

Миграции базы данных

bash
python manage.py makemigrations python manage.py migrate

Представления (views.py)

python
from django.shortcuts import render from django.http import HttpResponse def hello(request): return HttpResponse("Привет, Django!") def home(request): return render(request, "home.html", {"name": "Иван"})

Маршрутизация (urls.py)

В project/urls.py:

python
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('myapp.urls')), ]

В myapp/urls.py:

python
from django.urls import path from . import views urlpatterns = [ path('', views.home), path('hello/', views.hello), ]

Шаблоны (templates/)

Файл