💻 Примеры: Django-проект от А до Я

⚡ Полный цикл — кратко

# 1. Создать проект
django-admin startproject config .

# 2. Создать .env
echo SECRET_KEY=my-secret-key > .env

# 3. settings.py — читать .env
from environ import Env
env = Env()
Env.read_env(BASE_DIR / '.env')
SECRET_KEY = env('SECRET_KEY')

# 4. Запустить
python manage.py runserver

# 5. Создать приложение
python manage.py startapp first_app

# 6. Написать view + url
# first_app/views.py
from django.http import HttpResponse
def first_view(request):
    return HttpResponse("<h1>Hello!</h1>")

Пример 1: Полный .env файл проекта

# .env (НЕ коммитить в git!)
SECRET_KEY=django-insecure-very-secret-key-change-in-production
DEBUG=True
ALLOWED_HOSTS=127.0.0.1,localhost

# MySQL (опционально)
MYSQL=False
DB_NAME=django_project
DB_USER=username
DB_PASSWORD=password
DB_HOST=localhost
DB_PORT=3306

Пример 2: settings.py с полной интеграцией django-environ

# config/settings.py
from pathlib import Path
from environ import Env

BASE_DIR = Path(__file__).resolve().parent.parent

# Инициализируем environ
env = Env()
Env.read_env(BASE_DIR / '.env')

# Безопасность
SECRET_KEY = env('SECRET_KEY')
DEBUG = env.bool('DEBUG', default=False)
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=[])

# Приложения
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Наши приложения
    'first_app.apps.FirstAppConfig',
]

# База данных — условный выбор
if env.bool('MYSQL', default=False):
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': env('DB_NAME'),
            'USER': env('DB_USER'),
            'PASSWORD': env('DB_PASSWORD'),
            'HOST': env('DB_HOST'),
            'PORT': env('DB_PORT'),
        },
    }
else:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
        },
    }

Пример 3: first_app/views.py

# first_app/views.py
from django.http import HttpResponse

def first_view(request):
    return HttpResponse("<h1>Hello! It's my first view!</h1>")

Пример 4: first_app/urls.py

# first_app/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('first/', views.first_view, name='first_view'),
]

Пример 5: Корневой config/urls.py с include()

# config/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('first_app.urls')),  # подключение маршрутов приложения
]
Результат: После python manage.py runserver переходим на http://127.0.0.1:8000/first/ и видим заголовок «Hello! It's my first view!».

Пример 6: .gitignore для Django-проекта

# .gitignore
.env
__pycache__/
*.pyc
db.sqlite3
venv/
.venv/

Обязательно добавьте .env в .gitignore перед первым коммитом.