Когда мы создаем приложение в Django, важно правильно организовать все его компоненты. Это как построить хороший дом — каждая комната должна выполнять свою функцию, а вместе они образуют удобное жилище.
В Django есть три ключевых компонента, которые работают вместе: модели (models) для хранения данных, представления (views) для обработки запросов и маршруты (urls) для направления пользователей. Сегодня мы разберем, как эти компоненты взаимодействуют и создадим простое, но полноценное приложение блога.
Для начала давайте посмотрим, как обычно устроено приложение в Django и что делает каждый файл в этой структуре.
Таймлайн структуры приложения в Django
Типичная структура приложения выглядит так:
my_project/
|-- my_app/
|-- migrations/
|-- templates/
|-- static/
|-- __init__.py
|-- admin.py
|-- apps.py
|-- models.py
|-- tests.py
|-- urls.py
|-- views.py
Давайте разберем роли каждого компонента в структуре.
migrations/: папка, где Django хранит файлы миграций для синхронизации ваших моделей с базой данных.templates/: здесь живут HTML-шаблоны для рендера страниц.static/: место для CSS, JavaScript и других статических файлов.admin.py: конфигурация для Django Admin, где вы можете зарегистрировать свои модели.apps.py: файл конфигурации приложения (создается автоматически).models.py: здесь мы объявляем модели приложения.tests.py: файл для написания unit-тестов.urls.py: здесь описываются маршруты приложения.views.py: здесь живет логика обработки запросов и отдачи данных.
Построение структуры для приложения "Блог"
Мы уже создавали приложение "Блог", можете использовать его. Но на всякий случай кратко повторим основные шаги. Мы используем модели, представления (views) и маршруты (urls), чтобы объединить все в единое целое.
Шаг 1: Создание приложения
Сначала создадим новое приложение:
python manage.py startapp blog
Теперь добавьте приложение в INSTALLED_APPS файла settings.py:
INSTALLED_APPS = [
...
'blog',
...
]
Шаг 2: Создаем модели для приложения
Заглянем в файл models.py нашего приложения и добавим следующие модели:
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
bio = models.TextField(blank=True, null=True)
def __str__(self):
return self.name
class Category(models.Model):
name = models.CharField(max_length=50)
description = models.TextField(blank=True, null=True)
def __str__(self):
return self.name
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
published_date = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
categories = models.ManyToManyField(Category)
def __str__(self):
return self.title
Здесь мы описали три модели:
- Author: для хранения информации об авторах статей.
- Category: для классификации статей.
- Article: для сохранения контента статей, с привязкой к автору (через
ForeignKey) и категориям (черезManyToManyField).
Шаг 3: Создаем миграции
После создания моделей, не забудьте выполнить миграции, чтобы изменения применились к базе данных:
# Создаем файл миграции
python manage.py makemigrations
# Применяем миграции
python manage.py migrate
Шаг 4: Создание представлений (views)
Теперь мы перейдем к написанию представлений в файле views.py. Представления — это место, где мы обрабатываем запросы и возвращаем ответы.
Добавим несколько простых представлений:
from django.http import HttpResponse
from django.shortcuts import render
from .models import Article
def home(request):
return HttpResponse("Добро пожаловать в блог!")
def article_list(request):
articles = Article.objects.all()
return render(request, 'blog/article_list.html', {'articles': articles})
def article_detail(request, pk):
article = Article.objects.get(pk=pk)
return render(request, 'blog/article_detail.html', {'article': article})
home: простое представление, возвращающее текстовый ответ.article_list: вывод списка всех статей.article_detail: вывод подробной информации об одной статье.
Шаг 5: настройка маршрутов (urls.py)
Теперь создадим маршруты для нашего приложения. Для этого создадим файл urls.py в папке приложения blog:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('articles/', views.article_list, name='article_list'),
path('articles/<int:pk>/', views.article_detail, name='article_detail'),
]
path('', views.home): связывает корень маршрута приложения с представлениемhome.path('articles/'): связывает путь/articles/с представлениемarticle_list.path('articles/<int:pk>/'): связывает путь/articles/{id}с представлениемarticle_detail.
Не забудьте подключить маршруты приложения в основном urls.py проекта:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')),
]
Маршрут blog/ будет обрабатывать все запросы, начинающиеся с /blog.
Шаг 6: Шаблоны (templates)
Создадим папку templates/blog в директории приложения и добавим два файла:
article_list.html:
<h1>Список статей</h1>
<ul>
{% for article in articles %}
<li><a href="/blog/articles/{{ article.id }}/">{{ article.title }}</a></li>
{% endfor %}
</ul>
article_detail.html:
<h1>{{ article.title }}</h1>
<p><strong>Автор:</strong> {{ article.author.name }}</p>
<p><strong>Контент:</strong> {{ article.content }}</p>
<p><strong>Опубликовано:</strong> {{ article.published_date }}</p>
Эти шаблоны рендерят HTML-страницы для списка статей и детальной информации о статье.
Шаг 7: Оживляем приложение
Теперь наше приложение "Блог" готово к запуску. Запустите сервер командой:
python manage.py runserver
Откройте браузер на http://127.0.0.1:8000/blog/articles/ — вы должны увидеть список статей из базы данных. Кликните на любую статью, чтобы посмотреть её подробности.
Практическое задание
- Добавьте новое представление для отображения списка авторов.
- Создайте маршрут для нового представления.
- Напишите соответствующий шаблон для отображения авторов.
- Подумайте, как можно улучшить структуру кода приложения (например, добавив разделение на модули).
Поздравляю, вы только что освоили одну из ключевых концепций Django — организацию приложения! Теперь ваш код становится более структурированным и готовым к расширению.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ