Как начать работать с Django

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

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

Начать курс

Начало работы с Django: Пошаговое руководство для начинающих

Если вы освоили основы Python и планируете попробовать себя в разработке веб-приложений, Django станет отличным выбором. Этот популярный и мощный фреймворк для веб-разработки на Python позволяет быстро создавать надежные, безопасные и масштабируемые веб-приложения. С его помощью можно разработать как простой блог, так и сложный корпоративный портал.

Что такое Django и его преимущества

Django представляет собой высокоуровневый веб-фреймворк, написанный на языке Python. Основная философия фреймворка - "Don't Repeat Yourself" (DRY), что означает "Не повторяй себя". Этот принцип позволяет писать чистый, логичный и повторно используемый код.

Ключевые преимущества Django

  • Простота и высокая скорость разработки веб-приложений
  • Встроенные средства безопасности для защиты от основных угроз
  • Мощный шаблонизатор для работы с HTML-разметкой
  • Готовая административная панель без дополнительной настройки
  • Поддержка ORM (Object-Relational Mapping) для удобной работы с базами данных
  • Активное сообщество разработчиков и большое количество бесплатных библиотек
  • Подробная документация и множество обучающих материалов
  • Масштабируемость и производительность для проектов любого размера

Установка Django и подготовка среды разработки

Проверка и установка Python

Убедитесь, что на вашем компьютере установлен Python версии 3.8 или выше. Проверить версию можно командой:

python --version

Если Python не установлен, скачайте его с официального сайта python.org и выполните установку согласно инструкциям для вашей операционной системы.

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

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

python -m venv venv
source venv/bin/activate  # Для Linux/MacOS
venv\Scripts\activate     # Для Windows

Виртуальное окружение помогает управлять зависимостями проекта и предотвращает конфликты между разными версиями библиотек.

Установка Django фреймворка

После активации виртуального окружения установите Django:

pip install django

Проверьте успешность установки и версию Django:

django-admin --version

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

Инициализация нового проекта

Создайте новый Django проект с помощью команды:

django-admin startproject mysite
cd mysite

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

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

Где:

  • manage.py - утилита для управления проектом
  • settings.py - файл настроек проекта
  • urls.py - конфигурация URL-маршрутов
  • wsgi.py и asgi.py - файлы для развертывания на сервере

Запуск встроенного сервера разработки

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

python manage.py runserver

Откройте браузер и перейдите по адресу http://127.0.0.1:8000/. Вы увидите приветственную страницу Django, что подтверждает правильность установки и настройки.

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

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

python manage.py startapp blog

В результате появится папка blog со следующей структурой:

blog/
    __init__.py
    admin.py
    apps.py
    models.py
    tests.py
    views.py
    migrations/

Не забудьте добавить созданное приложение в список INSTALLED_APPS в файле settings.py:

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

Работа с моделями данных

Создание модели в models.py

Модели в Django определяют структуру данных и логику работы с базой данных. Создадим простую модель для поста блога:

from django.db import models
from django.contrib.auth.models import User

class Post(models.Model):
    title = models.CharField(max_length=200, verbose_name="Заголовок")
    slug = models.SlugField(max_length=200, unique=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="Автор")
    content = models.TextField(verbose_name="Содержание")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="Дата создания")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="Дата обновления")
    status = models.CharField(max_length=10, choices=[
        ('draft', 'Черновик'),
        ('published', 'Опубликовано')
    ], default='draft')

    class Meta:
        ordering = ['-created_at']
        verbose_name = "Пост"
        verbose_name_plural = "Посты"

    def __str__(self):
        return self.title

Настройка административной панели

Административная панель Django позволяет легко управлять данными. Зарегистрируйте модель в файле admin.py:

from django.contrib import admin
from .models import Post

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ['title', 'author', 'status', 'created_at']
    list_filter = ['status', 'created_at', 'author']
    search_fields = ['title', 'content']
    prepopulated_fields = {'slug': ('title',)}
    date_hierarchy = 'created_at'
    ordering = ['status', '-created_at']

Миграции и работа с базой данных

Создание и применение миграций

Миграции в Django отслеживают изменения в моделях и применяют их к базе данных:

python manage.py makemigrations
python manage.py migrate

Команда makemigrations создает файлы миграций на основе изменений в моделях, а migrate применяет эти изменения к базе данных.

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

Для доступа к административной панели создайте учетную запись администратора:

python manage.py createsuperuser

Введите имя пользователя, email и пароль. После этого вы сможете войти в административную панель по адресу http://127.0.0.1:8000/admin/.

Создание представлений и маршрутизация

Базовые представления в views.py

Представления (views) обрабатывают HTTP-запросы и возвращают HTTP-ответы. Создадим несколько представлений:

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import Post

def home(request):
    posts = Post.objects.filter(status='published').order_by('-created_at')[:5]
    return render(request, 'blog/home.html', {'posts': posts})

def post_detail(request, slug):
    post = get_object_or_404(Post, slug=slug, status='published')
    return render(request, 'blog/post_detail.html', {'post': post})

def post_list(request):
    posts = Post.objects.filter(status='published')
    return render(request, 'blog/post_list.html', {'posts': posts})

Настройка URL-маршрутов

Создайте файл urls.py в директории приложения blog:

from django.urls import path
from . import views

app_name = 'blog'

urlpatterns = [
    path('', views.home, name='home'),
    path('posts/', views.post_list, name='post_list'),
    path('post/<slug:slug>/', views.post_detail, name='post_detail'),
]

Подключите маршруты приложения в основном файле mysite/urls.py:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]

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

Создание структуры шаблонов

Создайте папку templates/blog/ внутри приложения и добавьте базовый шаблон base.html:

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{% block title %}Мой блог{% endblock %}</title>
    {% load static %}
    <link rel="stylesheet" href="{% static 'blog/css/style.css' %}">
</head>
<body>
    <header>
        <nav>
            <a href="{% url 'blog:home' %}">Главная</a>
            <a href="{% url 'blog:post_list' %}">Все посты</a>
        </nav>
    </header>
    
    <main>
        {% block content %}
        {% endblock %}
    </main>
    
    <footer>
        <p>&copy; 2024 Мой блог. Все права защищены.</p>
    </footer>
</body>
</html>

Шаблон главной страницы

Создайте home.html:

{% extends 'blog/base.html' %}

{% block title %}Главная страница - Мой блог{% endblock %}

{% block content %}
<h1>Добро пожаловать на мой блог!</h1>
<h2>Последние посты</h2>

{% if posts %}
    {% for post in posts %}
    <article>
        <h3><a href="{% url 'blog:post_detail' post.slug %}">{{ post.title }}</a></h3>
        <p class="meta">Автор: {{ post.author.username }} | Дата: {{ post.created_at|date:"d.m.Y" }}</p>
        <p>{{ post.content|truncatewords:30 }}</p>
    </article>
    {% endfor %}
{% else %}
    <p>Пока нет опубликованных постов.</p>
{% endif %}
{% endblock %}

Статические файлы и стилизация

Настройка статических файлов

В файле settings.py убедитесь, что настроены пути для статических файлов:

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    BASE_DIR / "static",
]
STATIC_ROOT = BASE_DIR / "staticfiles"

Создание CSS стилей

Создайте папку static/blog/css/ и файл style.css:

body {
    font-family: Arial, sans-serif;
    line-height: 1.6;
    margin: 0;
    padding: 0;
    background-color: #f4f4f4;
}

header {
    background-color: #333;
    color: white;
    padding: 1rem;
}

nav a {
    color: white;
    text-decoration: none;
    margin-right: 1rem;
}

main {
    max-width: 800px;
    margin: 2rem auto;
    padding: 0 1rem;
    background-color: white;
    border-radius: 5px;
    box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}

article {
    border-bottom: 1px solid #eee;
    padding: 1rem 0;
}

.meta {
    color: #666;
    font-size: 0.9rem;
}

Дополнительные возможности Django

Работа с формами

Django предоставляет мощный механизм работы с HTML-формами. Создайте файл forms.py:

from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'slug', 'content', 'status']
        widgets = {
            'content': forms.Textarea(attrs={'rows': 10}),
            'title': forms.TextInput(attrs={'class': 'form-control'}),
        }

Система авторизации

Django включает готовую систему авторизации. Добавьте представления для входа и регистрации:

from django.contrib.auth import login
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import redirect

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request, user)
            return redirect('blog:home')
    else:
        form = UserCreationForm()
    return render(request, 'registration/register.html', {'form': form})

Направления для дальнейшего изучения

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

  • Продвинутая работа с формами и валидация данных
  • Система авторизации и права доступа пользователей
  • Django REST Framework для создания API
  • Кэширование и оптимизация производительности приложений
  • Тестирование Django приложений
  • Развертывание на серверах (Heroku, DigitalOcean, AWS)
  • Интеграция с внешними сервисами и API
  • Работа с сигналами Django
  • Создание собственных middleware
  • Интернационализация и локализация

Полезные ресурсы для изучения

  • Официальная документация Django
  • Django Girls Tutorial для начинающих
  • Real Python Django курсы
  • MDN Web Docs по веб-разработке
  • Сообщество Django на GitHub
  • Форумы и чаты разработчиков Django

Теперь у вас есть полное представление о том, как начать работать с Django. Этот мощный фреймворк позволяет быстро разрабатывать надежные веб-приложения, используя встроенные средства безопасности и удобную административную панель. Изучайте документацию, экспериментируйте с кодом, и вскоре вы сможете создавать сложные проекты с нуля.

Новости