Django создаёт первый проект

В этой главе мы познакомимся с инструментом управления Django и с тем, как использовать Django для создания проектов. Первый проект мы назовём HelloWorld.

Примечания к тестовой версии:

  • Python 3.9.7

  • Django 4.2.7

Проверить номер версии можно с помощью следующей команды:

# python3 -V
Python 3.9.7
# python3 -m django --version
4.2.7

Инструмент управления Django

После установки Django у вас теперь должен быть доступен инструмент управления.django-admin, если в Windows не настроены переменные среды, можно использоватьdjango-admin。

Давайте рассмотрим введение в команды django-admin:

$ django-admin

Type 'django-admin help <subcommand>' for help on a specific subcommand.

Available subcommands:

[django]
    check
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata
    flush
    inspectdb
    loaddata
    makemessages
    makemigrations
    migrate
    runserver
    sendtestemail
    shell
    showmigrations
    sqlflush
    sqlmigrate
    sqlsequencereset
    squashmigrations
    startapp
    startproject
    test
    testserver
……省略部分……

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

Используйте django-admin для создания проекта HelloWorld:

django-admin startproject HelloWorld

После создания мы можем просмотреть структуру каталогов проекта:

$ cd HelloWorld/
$ tree
HelloWorld/                  # 项目根目录
├── manage.py                # 项目管理脚本
├── db.sqlite3               # SQLite 数据库文件
├── __pycache__/             # Python 字节码缓存
└── HelloWorld/              # 项目配置目录(与项目同名)
    ├── __init__.py          # 包标识文件
    ├── settings.py          # 项目设置
    ├── urls.py             # 主路由配置
    ├── asgi.py             # ASGI 配置
    └── wsgi.py             # WSGI 配置

Корневой каталог проекта (HelloWorld/):

Файл/каталогФункция
manage.pyТочка входа инструмента командной строки Django, используемая для запуска сервера разработки, миграций базы данных и других операций.
db.sqlite3Файл базы данных SQLite (база данных по умолчанию, используется в среде разработки).
__pycache__/Каталог кэша байт-кода Python (создаётся автоматически, ручное изменение не требуется).

Основной каталог конфигурации проекта (HelloWorld/HelloWorld/):

Файл/каталогФункция
__init__.pyПустой файл, сообщает Python, что этот каталог является пакетом.
settings.pyОсновной файл конфигурации, включая:
- Настройки базы данных (DATABASES)
- Пути к статическим файлам (STATIC_URL)
- Регистрация приложений (INSTALLED_APPS)
- Режим отладки (DEBUG=True/False)
urls.pyОсновной файл конфигурации маршрутов, определяет соответствие между URL-путями и представлениями.
asgi.pyКонфигурация ASGI-сервера (используется для асинхронных веб-серверов, таких как Daphne).
wsgi.pyКонфигурация WSGI-сервера (для традиционных веб-серверов, таких как Gunicorn, uWSGI).

Далее мы переходим в директорию HelloWorld и выполняем следующую команду для запуска сервера:

python3 manage.py runserver 0.0.0.0:8000

0.0.0.0 позволяет другим компьютерам подключаться к серверу разработки, а 8000 — это номер порта. Если не указан, номер порта по умолчанию равен 8000.

Введите IP-адрес вашего сервера в браузере (здесь мы вводим локальный IP-адрес:127.0.0.1:8000) и номер порта. Если он запускается нормально, вывод будет следующим:

Подробное объяснение ключевых файлов

1. settings.py (основная конфигурация)

Пример

# Пример фрагмента HelloWorld/settings.py

# Предупреждение по безопасности: DEBUG должен быть отключён в производственной среде!
DEBUG = True

# Разрешённые доменные имена (необходимо настроить, когда DEBUG=False)
ALLOWED_HOSTS = []

# Зарегистрированные приложения Django
INSTALLED_APPS = [
    'django.contrib.admin',  # Административная панель
    'django.contrib.auth',   # Система аутентификации
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',  # Обработка статических файлов
]

# Конфигурация базы данных (по умолчанию SQLite)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',  # Путь к файлу базы данных
    }
}

# URL статических файлов (CSS/JS/изображения)
STATIC_URL = 'static/'

2. urls.py (конфигурация маршрутизации)

Пример

# Пример HelloWorld/urls.py

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

urlpatterns = [
    path('admin/', admin.site.urls),  # Маршруты управления бэкендом
    # Здесь можно добавить собственные маршруты, например:
    # path('blog/', include('blog.urls')),
]

3. manage.py (скрипт управления проектом)

Пример

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "HelloWorld.settings")
    from django.core.management import execute_from_command_line
    execute_from_command_line(sys.argv)

Представления и конфигурация URL

В созданном ранее каталоге HelloWorld создайте новый файл views.py внутри каталога HelloWorld и введите код:

Код файла HelloWorld/HelloWorld/views.py:

from django.http import HttpResponse def hello(request): return HttpResponse("Hello world ! ")

Далее привяжите URL к функции представления. Откройте файл urls.py, удалите исходный код и скопируйте и вставьте следующий код в файл urls.py:

Код файла HelloWorld/HelloWorld/urls.py:

from django.urls import path from . import views urlpatterns = [ path("", views.hello, name="hello"), ]

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

$ tree
.
|-- HelloWorld
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- settings.py
|   |-- settings.pyc
|   |-- urls.py              # url 配置
|   |-- urls.pyc
|   |-- views.py              # 添加的视图文件
|   |-- views.pyc             # 编译后的视图文件
|   |-- wsgi.py
|   `-- wsgi.pyc
`-- manage.py

После завершения запустите сервер разработки Django и откройте его в браузере. Откройте браузер и перейдите по адресу:

Мы также можем изменить следующие правила:

Код файла HelloWorld/HelloWorld/urls.py:

from django.urls import path from . import views urlpatterns = [ path('hello/', views.hello), ]

Откройте в браузереhttp://127.0.0.1:8000/hello, и вывод будет следующим:

Примечание:Если код в проекте изменён, сервер автоматически обнаружит изменения кода и автоматически перезагрузится, поэтому, если вы уже запустили сервер, вручную перезапускать его не нужно.


Функция path()

Django path() может принимать четыре параметра: два обязательных параметра: route, view, и два необязательных параметра: kwargs, name.

Синтаксис:
path(route, view, kwargs=None, name=None)
  • route:Строка, определяющая часть пути URL. Она может содержать переменные, например<int:my_variable>, чтобы захватывать параметры из URL и передавать их в функцию представления.

  • view:Функция представления обрабатывает запросы, соответствующие заданному маршруту. Она может быть функцией или представлением на основе класса.

  • kwargs (необязательно):Словарь, содержащий дополнительные именованные аргументы, передаваемые в функцию представления.

  • name (необязательно):Задаёт уникальное имя для URL-маршрута, чтобы на него можно было ссылаться в других местах кода. Это очень полезно для генерации URL в шаблонах или выполнения перенаправлений в коде.

В Django 2.0 метод re_path() можно использовать для совместимости с методомurl(), а также через re_path() можно реализовать некоторые правила регулярных выражений.

from django.urls import include, re_path

urlpatterns = [
    re_path(r'^index/$', views.index, name='index'),
    re_path(r'^bio/(?P<username>\w+)/$', views.bio, name='bio'),
    re_path(r'^weblog/', include('blog.urls')),
    ...
]
Другие расширения