Гайды

Django: создание первого проекта и приложения

venv, startproject и startapp, модели и миграции, админка, простой JSON view и настройки на старт.

~11 мин чтения

Django: создание первого проекта и приложения

Django — full-stack фреймворк: ORM, маршрутизация, шаблоны, админка, формы, миграции. Этот гайд — первый проект и приложение с понятной структурой. Оптимизация ORM — Django ORM: запросы и select_related; REST API — официальный tutorial Django REST framework.


1. Установка и виртуальное окружение

bash
python -m venv .venv
.venv\Scripts\activate
pip install django
django-admin --version

Рекомендуется Django 5.x на Python 3.10+ (см. матрицу для вашей версии).


2. Создание проекта

bash
django-admin startproject config .

Точка в конце кладёт manage.py и пакет config/ в текущий каталог.

Структура:

text
manage.py
config/
  __init__.py
  settings.py
  urls.py
  asgi.py
  wsgi.py

settings.py — база данных, INSTALLED_APPS, MIDDLEWARE, SECRET_KEY, DEBUG, ALLOWED_HOSTS.


3. Приложение (app)

bash
python manage.py startapp shop

Папка shop/ — модели, представления, urls.py, админка, тесты.

Добавьте shop в INSTALLED_APPS в settings.py.


4. Модель и миграции

shop/models.py:

python
from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=200)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name
bash
python manage.py makemigrations shop
python manage.py migrate

5. Админка (опционально, но полезно)

shop/admin.py:

python
from django.contrib import admin
from .models import Product

admin.site.register(Product)

Создайте суперпользователя: python manage.py createsuperuser, включите path("admin/", admin.site.urls) в config/urls.py.


6. View и URL

shop/views.py:

python
from django.http import JsonResponse
from .models import Product

def product_list(request):
    items = list(Product.objects.values("id", "name", "price")[:50])
    return JsonResponse({"items": items})

shop/urls.py:

python
from django.urls import path
from . import views

urlpatterns = [
    path("products/", views.product_list),
]

config/urls.py:

python
from django.urls import path, include

urlpatterns = [
    path("api/", include("shop.urls")),
]

7. Запуск

bash
python manage.py runserver

Для продакшена — gunicorn + uvicorn (ASGI) или классический WSGI; статика через WhiteNoise или Nginx. Для полноценного REST API на Django — Django REST Framework.


8. Настройки на старт

  • SECRET_KEY — из env, не в Git.
  • DEBUG=False в проде, ALLOWED_HOSTS заполнен.
  • DATABASES — PostgreSQL вместо SQLite, когда проект вырос.

9. Чек-лист

  • Один крупный models.py или разбиение по подмодулям по мере роста.
  • Миграции коммитятся в репозиторий.
  • Разделение settings/base.py + local.py / prod.py по окружениям.

Дальше: Django REST Framework · Оптимизация ORM · тег Django