Код
#статьи

Django для новичков: что это за фреймворк и зачем его изучать

Ознакомительная статья для тех, кто освоил базовый синтаксис Python и готов перейти на новый уровень в веб-разработке.

Иллюстрация: Django / Freepik / freepik / Colowgee для Skillbox Media

Представьте сборку механических часов. Изготовление каждой детали вручную займёт много времени и потребует глубоких технических знаний. Однако с готовыми деталями и инструкцией по сборке процесс значительно ускорится и упростится. В разработке ситуация схожая, и для упрощения работы программисты используют фреймворки — наборы готовых компонентов, которые часто встречаются во многих приложениях.

В этой статье мы рассмотрим Django — популярный фреймворк для разработки на Python. Мы обсудим его предназначение, структуру, особенности и дадим рекомендации для создания первого проекта.

Содержание

ЭКСПЕРТ

Алексей Некрасов

Лидер направления Python в МТС, программный директор направления Python в Skillbox. 

Что такое Django

Django — это бесплатный высокоуровневый фреймворк с открытым исходным кодом, предназначенный для создания приложений на языке Python. Его основная цель — помочь разработчикам быстро и безопасно создавать серверную часть сайтов.

Django позиционируется как «полностью укомплектованный» фреймворк с обширным набором инструментов для типичных задач веб-разработки. Среди них: создание и структурирование нового приложения, работа с базами данных, внедрение бизнес-логики, реализация CRUD-операций, управление пользовательскими аккаунтами, обработка форм и другое. Такой подход позволяет разработчикам сконцентрироваться на логике проекта, не отвлекаясь на технические детали реализации.

Например, при создании простой формы регистрации на чистом Python разработчику приходится писать отдельный код для валидации данныххеширования паролей и сохранения информации в базе данных. Также необходимо настроить обработку ошибок и реализовать систему уведомлений о статусе регистрации. Это долгий и трудоёмкий процесс: каждый компонент нужно создать, протестировать и интегрировать с другими. К тому же приходится учитывать вопросы безопасности, производительности, совместимости с разными браузерами и прочее.

Django упрощает и ускоряет эти процессы, предоставляя набор встроенных инструментов и функций. Рассмотрим наиболее востребованные из них:

  • ORM (object-relational mapping): позволяет писать запросы к базам данных на Python вместо SQL. ORM абстрагирует взаимодействие с базами данных, автоматически генерирует схемы и упрощает разработку приложений.
  • Система аутентификации: обеспечивает комплексное управление учётными записями, группами и правами доступа. Она упрощает реализацию функций регистрации, входа и выхода пользователей, контролирует доступ к различным разделам сайта и управляет клиентскими сессиями через cookies.
  • Шаблонизатор: инструмент для создания динамического HTML-кода. Он позволяет внедрять переменные в шаблоны для динамического отображения данных на веб-страницах. С его помощью можно создать базовый шаблон с общей структурой сайта, а затем расширять его для отдельных страниц, добавляя уникальный контент: текст, изображения, информацию о товарах, комментарии и многое другое.
  • Работа с формами: встроенная библиотека для отображения и проверки форм. Она упрощает создание форм ввода данных и их валидацию по заданным критериям. Например, можно создать форму регистрации с полями для имени пользователя, электронной почты и пароля. Когда пользователь заполнит и отправит такую форму, Django проверит корректность заполнения всех полей.
  • URL-маршрутизация: удобная система для связывания URL-адресов с функциями обработки запросов. Она позволяет создавать понятные ссылки на страницы вашего веб-приложения. Например, вы можете настроить URL "/blog/" для отображения списка статей и "/blog/<id>/" для просмотра конкретной статьи.
  • Встроенная административная панель: автоматически генерируемый интерфейс для управления данными приложения. Она позволяет легко просматривать, добавлять, редактировать и удалять записи в базе данных без написания дополнительного кода.
  • Интернационализация: встроенная поддержка многоязычности и автоматическая локализация форматов даты, времени и чисел.
  • Встроенная защита от распространённых уязвимостей: Django обеспечивает защиту от SQL-инъекций, межсайтового скриптинга (XSS), подделки межсайтовых запросов (CSRF), кликджекинга и удалённого выполнения кода.

Из описанных функций видно, что Django в первую очередь предназначен для разработки серверной части (бэкенда) веб-приложений. Фреймворк обрабатывает пользовательские запросы, управляет базами данных и отвечает за логику приложения. Хотя Django можно использовать для рендеринга HTML-кода и создания простых веб-страниц, для сложных пользовательских интерфейсов разработчики часто комбинируют его с инструментами для фронтенда — React, Vue.js или Angular.

Сравниваем код, написанный на чистом Python и на Python в Django 👇

Создадим форму регистрации пользователя на чистом Python. Код будет включать валидацию данных, хеширование паролей и сохранение информации в базе данных:

import sqlite3
import hashlib

def create_table() -> None:
    """Создаёт таблицу пользователей в базе данных, если она ещё не существует."""
    conn = sqlite3.connect('users.db')  # Устанавливаем соединение с базой данных
    cursor = conn.cursor()  # Создаём курсор для выполнения операций с базой данных
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS users (
            id INTEGER PRIMARY KEY,
            username TEXT UNIQUE,
            email TEXT UNIQUE,
            password TEXT
        )
    ''')  # SQL-запрос для создания таблицы
    conn.commit()  # Сохраняем изменения в базе данных
    conn.close()  # Закрываем соединение

def hash_password(password: str) -> str:
    """Хеширует пароль с использованием алгоритма SHA-256."""
    return hashlib.sha256(password.encode()).hexdigest()  # Возвращаем хешированный пароль

def register_user(username: str, email: str, password: str) -> None:
    """Регистрирует нового пользователя, проверяя данные и хешируя пароль."""
    conn = sqlite3.connect('users.db')  # Устанавливаем соединение с базой данных
    cursor = conn.cursor()  # Создаём курсор для выполнения операций с базой данных
    
    # Валидация данных: проверка длины пароля
    if len(password) < 8:
        raise ValueError("Пароль должен содержать не менее восьми символов.")
    
    hashed_password = hash_password(password)  # Хешируем пароль
    
    try:
        cursor.execute('INSERT INTO users (username, email, password) VALUES (?, ?, ?)', 
                       (username, email, hashed_password))  # SQL-запрос для добавления пользователя
        conn.commit()  # Сохраняем изменения в базе данных
    except sqlite3.IntegrityError:
        print("Пользователь с таким именем или email уже существует.")  # Обработка ошибки, если пользователь уже есть
    finally:
        conn.close()  # Закрываем соединение

# Пример использования
create_table()  # Создаём таблицу пользователей
try:
    register_user('testuser', 'test@example.com', 'password123')  # Регистрируем нового пользователя
    print("Пользователь зарегистрирован успешно!")  # Сообщение об успешной регистрации
except ValueError as e:
    print(e)  # Сообщение об ошибке валидации пароля

Перепишем код на Django:

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.hashers import make_password
from django.core.exceptions import ValidationError
from django.http import HttpRequest, HttpResponse
from django.shortcuts import render, redirect

class RegistrationForm(forms.ModelForm):
    """Форма регистрации пользователя с валидацией пароля."""
    password = forms.CharField(widget=forms.PasswordInput)  # Поле для ввода пароля с маскировкой

    class Meta:
        model = User  # Используем модель пользователя Django
        fields = ['username', 'email', 'password']  # Указываем поля для формы

    def clean_password(self) -> str:
        """Валидация пароля: проверка минимальной длины и хеширование."""
        password: str = self.cleaned_data.get('password')  # Получаем пароль из формы
        if len(password) < 8:
            raise ValidationError("Пароль должен содержать не менее восьми символов.")  # Проверка длины пароля
        return make_password(password)  # Возвращаем хешированный пароль

def register(request: HttpRequest) -> HttpResponse:
    """Обработка регистрации пользователя."""
    if request.method == 'POST':  # Если форма отправлена
        form = RegistrationForm(request.POST)  # Создаём форму с данными
        if form.is_valid():  # Проверяем, что форма валидна
            form.save()  # Сохраняем нового пользователя
            return redirect('login')  # Перенаправление на страницу входа
    else:
        form = RegistrationForm()  # Создаём пустую форму
    
    return render(request, 'registration/register.html', {'form': form})  # Отправляем форму на страницу

Что изменилось

  • Код на Django стал более лаконичным благодаря встроенным функциям, которые автоматизируют процессы валидации и хеширования.
  • Django использует ORM для взаимодействия с базой данных, избавляя разработчиков от необходимости писать SQL-запросы вручную.
  • В Django обработка ошибок встроена в форму, а в коде на чистом Python разработчик должен самостоятельно управлять возможными исключениями.
  • Django автоматически обеспечивает хеширование паролей и другие аспекты безопасности. При работе с чистым Python разработчик должен сам позаботиться о применении надёжных алгоритмов хеширования.

Django не только упрощает процесс разработки, но и значительно повышает безопасность и надёжность кода, сводя к минимуму вероятность ошибок.

Как устроен фреймворк

Django использует архитектурный паттерн Model-View-Controller (MVC), который структурирует код и разделяет приложение на три компонента:

  • Model (модель) — отвечает за структуру данных и бизнес-логику приложения.
  • View (представление) — отвечает за отображение информации.
  • Controller (контроллер) — обрабатывает запросы пользователя, взаимодействует с моделью и передаёт данные в представление.

Предположим, мы разрабатываем онлайн-кинотеатр. В этом случае модель будет хранить информацию о каждом фильме — его название, год выпуска и другие сведения. Контроллер примет запрос пользователя. Например, он может получить запрос «показать список фильмов», затем обратиться к модели за данными и передать их представлению. Представление отобразит этот список фильмов на веб-странице.

В Django паттерн MVC реализован как MTV (Model-Template-View). Model сохраняет свою функцию, Template (Шаблон) соответствует View в MVC, а View в Django выполняет роль Controller. Рассмотрим, как работает MTV в Django на примере интернет-магазина:

  • Пользователь запрашивает страницу товара.
  • URL-маршрутизатор Django направляет запрос к соответствующему View.
  • View обращается к Model за данными о товаре.
  • Model извлекает информацию из базы данных.
  • View передаёт полученные данные в Template.
  • Template формирует HTML-страницу с информацией о товаре.
  • Django отправляет готовую страницу пользователю в ответ на его запрос.

Помимо архитектурного подхода, важно отметить философию дизайна Django. Вот несколько ключевых принципов, которых придерживаются разработчики фреймворка:

  • Не повторяйтесь (don’t repeat yourself, DRY) — избегайте избыточности. Пишите код единожды, а затем переиспользуйте и адаптируйте его для различных задач.
  • Меньше кода — лучше (less code is better). Стремитесь к минимальному использованию шаблонного кода и создавайте лаконичные решения, выполняющие больше задач меньшим количеством строк.
  • Слабая связанность (loose coupling) — отдельные компоненты приложения должны быть достаточно независимыми, чтобы их можно было заменять или модифицировать без нарушения работы всей системы.
  • Явное лучше неявного — код должен быть понятным для других разработчиков.
  • Разработка через тестирование — написание тестов для проверки функциональности должно предшествовать реализации самого кода.

Преимущества Django

Django был создан в 2003 году Адрианом Холоваты и Саймоном Уиллисоном — разработчиками из компании Lawrence Journal-World. Им требовалось быстро создавать и поддерживать новостные сайты, поэтому они разработали собственный фреймворк для автоматизации рутинных задач. В 2005 году Django стал проектом с открытым исходным кодом под управлением команды Django Software Foundation (DSF).

Django сегодня — это зрелый и надёжный фреймворк с обширной экосистемой, который постоянно развивается. Разработчики регулярно выпускают обновления безопасности, исправляют ошибки и ежегодно представляют крупные релизы. Благодаря такой активной поддержке многие компании выбирают Django для своих долгосрочных проектов. Вот несколько фактов, подтверждающих его популярность:

  • Согласно опросу Stack Overflow Developer Survey 2023, Django занимает 13-е место среди самых популярных веб-фреймворков.
  • У репозитория Django более 70 тысяч звёзд на GitHub, что делает его одним из самых популярных проектов на платформе.
  • По статистике PyPI (Python Package Index), пользователи скачивают Django более 20 миллионов раз ежемесячно.

Для новичков Django предлагает подробную документацию, а также поддержку большого сообщества. Если вы столкнётесь с трудностями в коде, поищите решение на Stack Overflow или в интернете — скорее всего, вы быстро найдёте подходящий ответ.

Также стоит отметить портативность и масштабируемость Django. Портативность позволяет легко переносить приложения между различными платформами — например, с локального сервера разработки на облачный хостинг. Масштабируемость обеспечивает эффективную работу при росте нагрузки и увеличении объёма данных. Эти качества делают Django универсальным инструментом как для небольших проектов, так и для крупномасштабных систем с высоким трафиком.

Что можно сделать на Django

Django — универсальный фреймворк, подходящий для проектов любой сложности. Он легко интегрируется с различными клиентскими технологиями и поддерживает множество форматов данных: HTML, RSS, JSON, XML и другие. Давайте рассмотрим несколько типов приложений, которые вы можете создать в качестве пет-проектов.

Идеи пет-проектов на Django для начинающих:

  • Таск-трекер для управления задачами с системой аутентификации, чтобы у каждого пользователя был доступ только к своему личному списку.
  • Мини-Reddit: разработайте платформу для публикации и редактирования постов. Дополнительно вы можете реализовать функции комментирования, использования тегов и категорий для удобной навигации.
  • Личное портфолио с панелью администратора для обновления контента и формой обратной связи для потенциальных клиентов.

Пет-проекты посложнее:

  • Интернет-магазин с категориями товаров, карточками продуктов, корзиной покупок и процессом оформления заказа. Вы можете интегрировать платёжную систему, предоставить пользователям возможность отслеживать заказы, а администраторам — управлять запасами и обрабатывать заказы.
  • Социальная сеть: создайте платформу, на которой пользователи смогут регистрироваться, настраивать профили, делиться постами, подписываться на других участников и взаимодействовать с контентом. Для улучшения функциональности добавьте систему уведомлений в реальном времени.
  • Система регистрации на мероприятия: создайте веб-сервис, где пользователи смогут организовывать события и записываться на них. Добавьте в интерфейс интерактивный календарь мероприятий, автоматическое подтверждение регистрации и систему уведомлений о предстоящих событиях.

Для вдохновения рекомендуем посетить builtwithdjango.com — сайт с обновляющимся списком проектов, созданных на Django. Среди известных примеров: Mozilla, NASA, Pinterest, Spotify, Dropbox, Bitbucket и другие.

Первый проект на Django

Если вы затрудняетесь с выбором первого пет-проекта, начните вместе с нами и создайте движок для блога с функциями публикации и редактирования записей:

  • В первой статье вы установите фреймворк, создадите движок для блога, определите компоненты записей и научитесь их публиковать.
  • Во второй статье вы настроите админпанель и улучшите внешний вид постов.

С Django удобно работать в редакторе PyCharm. Хотя профессиональная версия этого редактора платная, новичкам вполне подойдёт бесплатная Community-версия. Если вы предпочитаете использовать VS Code — посмотрите инструкцию по его настройке для разработки на Django.

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Python-фреймворк Django Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована