📝 Django

Views в Django: обработка запросов

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
75
🌱
Уровень
Начальный
🐦 💼 ✈️

View — функция или класс, которая принимает HTTP-запрос и возвращает HTTP-ответ.

Функциональный view (FBV)

# tasks/views.py
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import Task

def task_list(request):
    tasks = Task.objects.all()
    return render(request, 'tasks/list.html', {'tasks': tasks})

def task_detail(request, pk):
    task = get_object_or_404(Task, pk=pk)
    return render(request, 'tasks/detail.html', {'task': task})

HttpRequest — объект запроса

def my_view(request):
    request.method          # 'GET', 'POST', 'PUT', 'DELETE'
    request.GET             # QueryDict с GET-параметрами (?q=hello)
    request.POST            # QueryDict с данными формы
    request.user            # текущий пользователь
    request.path            # '/tasks/1/'
    request.META['HTTP_HOST']  # заголовки

HttpResponse и render

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, redirect

# Простой ответ
def simple(request):
    return HttpResponse("Hello, World!")

# Рендер шаблона
def with_template(request):
    context = {'name': 'Django', 'version': 5}
    return render(request, 'myapp/page.html', context)

# Редирект
def after_action(request):
    return redirect('/tasks/')
    # или по имени URL:
    return redirect('task-list')

Обработка POST-запроса

from django.views.decorators.http import require_http_methods

@require_http_methods(["GET", "POST"])
def create_task(request):
    if request.method == 'POST':
        title = request.POST.get('title', '').strip()
        if title:
            Task.objects.create(title=title)
            return redirect('task-list')

    return render(request, 'tasks/create.html')

get_object_or_404

from django.shortcuts import get_object_or_404

def task_detail(request, pk):
    # Вместо try/except Task.DoesNotExist
    task = get_object_or_404(Task, pk=pk)
    return render(request, 'tasks/detail.html', {'task': task})

Если объект не найден — автоматически возвращает 404.

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

pytest-django: тестирование Django

Охватываемые темы: Установка, @pytest.mark.djangodb, Фикстуры, Тестирование views.

📅 30.06.2026 👁️ 130
📝

AI-агенты: ReAct loop и автономные действия

Чат-бот отвечает на вопросы. Агент — действует: вызывает инструменты, получает реальные данные и использует их...

📅 30.06.2026 👁️ 97
📝

RAG: чат с документами через векторный поиск

RAG (Retrieval-Augmented Generation) — паттерн для работы с собственными документами. Вместо того чтобы переобучать модель,...

📅 30.06.2026 👁️ 88

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!