← Назад к вопросам

Из чего состоит Django

1.6 Junior🔥 151 комментариев
#Django

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Из чего состоит Django

Django — полнофункциональный веб-фреймворк. Вот его основные компоненты и архитектура.

MVT архитектура (Model-View-Template)

Пользователь → URL маршрутизация
                    ↓
           View (контроллер)
                    ↓
            Model (данные)
              ↓    ↓    ↓
            БД  Cache Signals
                    ↓
           Template (HTML)
                    ↓
            Ответ пользователю

1. ORM (Object-Relational Mapping)

# Models определяют структуру БД
from django.db import models

class User(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField(unique=True)
    created_at = models.DateTimeField(auto_now_add=True)

# Автоматическая миграция
python manage.py makemigrations
python manage.py migrate

# Работа с БД через Python
user = User.objects.create(name='John', email='john@example.com')
users = User.objects.filter(name='John')

2. Views и URL маршрутизация

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('users/', views.user_list, name='user-list'),
    path('users/<int:id>/', views.user_detail, name='user-detail'),
]

# views.py
from django.shortcuts import render
from .models import User

def user_list(request):
    users = User.objects.all()
    return render(request, 'users/list.html', {'users': users})

def user_detail(request, id):
    user = User.objects.get(id=id)
    return render(request, 'users/detail.html', {'user': user})

3. Templates (HTML шаблоны)

<!-- templates/users/list.html -->
<h1>Users</h1>
<ul>
  {% for user in users %}
    <li>{{ user.name }} ({{ user.email }})</li>
  {% endfor %}
</ul>

4. Forms

from django import forms

class UserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ['name', 'email']

# В view
def create_user(request):
    if request.method == 'POST':
        form = UserForm(request.POST)
        if form.is_valid():
            form.save()
    else:
        form = UserForm()
    return render(request, 'create.html', {'form': form})

5. Admin интерфейс

from django.contrib import admin

@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    list_display = ['name', 'email', 'created_at']
    search_fields = ['name', 'email']
    list_filter = ['created_at']

# http://localhost:8000/admin

6. Authentication & Authorization

from django.contrib.auth.decorators import login_required

@login_required
def protected_view(request):
    return render(request, 'protected.html')

# Встроенная система пользователей
from django.contrib.auth.models import User
user = User.objects.create_user(username='john', password='secret')

7. Middleware

# settings.py
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
]

# Custom middleware
class CustomMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
    
    def __call__(self, request):
        response = self.get_response(request)
        return response

8. Signals (события)

from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=User)
def user_created(sender, instance, created, **kwargs):
    if created:
        print(f"New user: {instance.name}")

9. Management Commands

# myapp/management/commands/my_command.py
from django.core.management.base import BaseCommand

class Command(BaseCommand):
    def handle(self, *args, **options):
        print("Running custom command")

# Запуск
python manage.py my_command

10. Testing

from django.test import TestCase, Client

class UserTests(TestCase):
    def test_user_creation(self):
        user = User.objects.create(name='John', email='john@example.com')
        self.assertEqual(user.name, 'John')
    
    def test_user_list_view(self):
        client = Client()
        response = client.get('/users/')
        self.assertEqual(response.status_code, 200)

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

myproject/
├── manage.py
├── requirements.txt
├── myproject/
│   ├── settings.py      # Конфигурация
│   ├── urls.py          # Маршруты проекта
│   ├── wsgi.py          # WSGI приложение
│   └── asgi.py          # ASGI приложение
├── myapp/
│   ├── models.py        # БД модели
│   ├── views.py         # Контроллеры
│   ├── urls.py          # Маршруты приложения
│   ├── templates/       # HTML шаблоны
│   ├── static/          # CSS, JS, изображения
│   ├── tests.py         # Тесты
│   └── admin.py         # Admin конфиг

Settings.py ключевые части

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
]

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydb',
    }
}

SECRET_KEY = 'secret-key-for-production'
DEBUG = False
ALLOWED_HOSTS = ['example.com']

Class-Based Views

from django.views import View
from django.views.generic import ListView, DetailView

class UserListView(ListView):
    model = User
    template_name = 'users/list.html'
    context_object_name = 'users'
    paginate_by = 10

class UserDetailView(DetailView):
    model = User
    template_name = 'users/detail.html'
    pk_url_kwarg = 'id'

Вывод: Django состоит из ORM, Views, Templates, Forms, Admin, Auth, Middleware, Signals и других компонентов, образуя полноценный фреймворк для разработки веб-приложений.