Проект блога на Django

В этой главе вы с нуля создадите проект блога с помощью Django и поймёте структуру проекта и жизненный цикл запроса.


Подготовка окружения

Django — это Python-веб-фреймворк; сначала нужно проверить окружение Python.

Откройте терминал и проверьте версию Python (требуется 3.8 или выше):

$ python3 --version
Python 3.12.0

Создайте виртуальное окружение и установите Django

Виртуальное окружение — стандартная практика для проектов на Python: оно даёт каждому проекту независимые зависимости, не мешающие друг другу.

$ python3 -m venv venv               # 创建虚拟环境
$ source venv/bin/activate           # 激活虚拟环境(Windows:venv\Scripts\activate)
(venv) $ pip install django          # 在虚拟环境中安装 Django

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

(venv) $ python -m django --version
5.0

Каждый раз при открытии нового терминала сначала необходимо выполнить этоsource venv/bin/activateАктивируйте виртуальное окружение. Приглашение терминала в начале(venv)Означает, что вы сейчас находитесь в виртуальном окружении.


Создайте проект Django

Django предоставляетdjango-admin startprojectИспользуйте команду для инициализации проекта.

(venv) $ django-admin startproject blog_project
(venv) $ cd blog_project

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

blog_project/
├── manage.py                    # 项目管理入口(启动服务器、执行迁移、创建 admin 等)
├── blog_project/                # 项目配置包
│   ├── __init__.py              # 标识这是一个 Python 包
│   ├── settings.py              # 全局配置(数据库、中间件、模板、静态文件等)
│   ├── urls.py                  # 根 URL 路由表
│   ├── wsgi.py                  # WSGI 部署入口(生产环境用)
│   └── asgi.py                  # ASGI 部署入口(WebSocket 用)

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

(venv) $ python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
Starting development server at http://127.0.0.1:8000/

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

Сервер разработки поддерживает горячую перезагрузку: после сохранения изменённого кода сервер автоматически перезапускается. Нажмите Ctrl+C, чтобы остановить сервер.


Ключевые замечания по настройке settings.py

settings.pyявляется центральным файлом конфигурации проекта Django, и каждый параметр конфигурации имеет ясное значение.

Элемент конфигурацииЗначение по умолчаниюФункция
DEBUGTrueРежим разработки (после развёртывания необходимо установить False)
DATABASESSQLiteКонфигурация базы данных (по умолчанию SQLite, дополнительная установка не требуется)
INSTALLED_APPSСписок встроенных приложенийПриложения, зарегистрированные в проекте
TEMPLATESDjangoTemplatesКонфигурация шаблонизатора
LANGUAGE_CODE'en-us'Язык (можно изменить на 'zh-hans')
TIME_ZONE'UTC'Часовой пояс (можно изменить на 'Asia/Shanghai')

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

Пример

# Путь к файлу: blog_project/settings.py
LANGUAGE_CODE = 'zh-hans'      # Интерфейс администратора отображается на китайском
TIME_ZONE = 'Asia/Shanghai'    # Установите часовой пояс на пекинское время

Создайте первое приложение: blog

Организация проекта Django такова:Проект содержит несколько приложений.。

Каждое приложение отвечает за независимый функциональный модуль (например, блоги, пользователи, комментарии).

(venv) $ python manage.py startapp blog

После выполнения создаётся каталог blog/:

blog/
├── __init__.py
├── admin.py       # 后台管理配置(第三章用到)
├── apps.py        # 应用配置
├── models.py      # 数据库模型(第二章用到)
├── views.py       # 视图函数(本章用到)
├── urls.py        # 需要手动创建(应用级路由)
└── migrations/    # 数据库迁移文件(第二章用到)

После создания приложения его нужно зарегистрировать в settings.py:

Пример

# Путь к файлу: blog_project/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',                      # Добавлено: зарегистрировать приложение blog
]

Жизненный цикл запроса Django

Понимание того, как проходят запросы в Django, помогает быстро находить проблемы в дальнейшем.

Просмотр deviceInput URL → urls.py matchRouting → логика обработки views.py → templates рендерят HTML → return просмотр device。

Эти три шага (URL → представление → шаблон) — это каркасная схема разработки на Django.


Практика: ваша первая страница на Django

Шаг 1: Напишите функцию представления (views.py)

Пример

# Путь к файлу: blog/views.py
from django.shortcuts import render

# Функция представления: получает запрос, возвращает ответ
def index(request):
    # Роль render: объединить request + template + data, вернуть HTML-ответ
    return render(request, 'blog/index.html', {
        'welcome': 'Добро пожаловать в EXAMPLE Blog',
        'intro': Это сайт-витрина личного блога, созданный с помощью Django.
    })

Шаг 2: Создайте файл шаблона (templates)

Создайте в каталоге blog/templates/blog/подкаталог, затем создайтеindex.html。

Пример

<!-- Путь к файлу: blog/templates/blog/index.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>EXAMPLE Blog</title>
    <style>
        body { font-family: sans-serif; max-width: 800px; margin: 0 auto; padding: 40px 20px; }
        h1 { color: #2c3e50; }
    </style>
</head>
<body>
    <h1>{{ welcome }}</h1>
    <p>{{ intro }}</p>
</body>
</html>

Использование переменных шаблона Django{{ variable name }}Синтаксис такой же, как у интерполяционного выражения Vue3. Данные словаря, передаваемые в render в views.py, можно использовать в шаблоне напрямую.

Шаг 3: Настройка маршрутизации (urls.py)

Сначала создайте его в blog/urls.pyВ качестве маршрутизации уровня приложения.

Пример

# Путь к файлу: blog/urls.py
from django.urls import path
from . import views

# Таблица маршрутизации приложения
urlpatterns = [
    path('', views.index, name='index'),  # Пустой путь соответствует / Home
]

Затем в urls.py уровня проекта используйтеinclude()Импортируйте маршруты приложения:

Пример

# Путь к файлу: blog_project/urls.py
from django.contrib import admin
from django.urls import path, include          # Импорт include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),            # Подключите маршруты приложения blog к корневому пути
]

Итоги главы

В этой главе вы выполнили три вещи: создали виртуальную среду и установили Django, инициализировали проект с помощью startproject/startapp и написали полную цепочку Представление → Шаблон → URL.

Главный вывод: понимать иерархию проект/приложение Django и освоить трёхэтапную схему разработки URL → Представление → Шаблон.

Другие расширения