Пример 1: Создание проекта с нуля
Полная последовательность создания нового Django 5.x проекта:
# Шаг 1: создаём папку и виртуальное окружение
mkdir myproject
cd myproject
python -m venv venv
venv\Scripts\activate # Windows
# Шаг 2: устанавливаем Django
pip install django
python -m django --version # убеждаемся: Django 5.x
# Шаг 3: создаём структуру проекта
django-admin startproject config .
# Шаг 4: проверяем что всё работает
python manage.py runserver
После шага 4 перейдите на http://127.0.0.1:8000/ — увидите страницу Django с ракетой.
Пример 2: Создание и подключение приложения
# Шаг 1: создаём приложение
python manage.py startapp myapp
# Структура после команды:
# myapp/
# ├── __init__.py
# ├── admin.py
# ├── apps.py
# ├── migrations/
# │ └── __init__.py
# ├── models.py
# ├── tests.py
# └── views.py
# Шаг 2: регистрируем в config/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp', # добавляем наше приложение
]
Пример 3: Простое view и маршрут
# myapp/views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("<h1>Главная страница</h1>")
def hello(request):
name = request.GET.get('name', 'мир')
return HttpResponse(f"<h1>Привет, {name}!</h1>")
# myapp/urls.py — создаём новый файл
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('hello/', views.hello, name='hello'),
]
# config/urls.py — подключаем маршруты приложения
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myapp.urls')), # подключаем myapp
]
Теперь:
http://127.0.0.1:8000/— главная страницаhttp://127.0.0.1:8000/hello/— приветствиеhttp://127.0.0.1:8000/hello/?name=Django— приветствие с именем
Пример 4: View с шаблоном
# myapp/views.py
from django.shortcuts import render
def about(request):
context = {
'title': 'О проекте',
'description': 'Мой первый Django-проект',
'features': ['ORM', 'Admin', 'Templates'],
}
return render(request, 'myapp/about.html', context)
<!-- myapp/templates/myapp/about.html -->
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
</head>
<body>
<h1>{{ title }}</h1>
<p>{{ description }}</p>
<ul>
{% for feature in features %}
<li>{{ feature }}</li>
{% endfor %}
</ul>
</body>
</html>
Шаблон ищется автоматически в
myapp/templates/myapp/about.html, если в settings.py установлено 'APP_DIRS': True. Двойная вложенность templates/myapp/ — рекомендуемое соглашение Django, предотвращающее конфликты имён между приложениями.
Пример 5: Class-based view (CBV)
# myapp/views.py
from django.views import View
from django.http import HttpResponse
class HelloView(View):
def get(self, request):
return HttpResponse("Hello from CBV!")
def post(self, request):
return HttpResponse("POST request received")
# myapp/urls.py
from django.urls import path
from .views import HelloView
urlpatterns = [
path('hello-cbv/', HelloView.as_view(), name='hello-cbv'),
]
Class-based views (CBV) удобны для повторного использования логики и соответствуют принципу DRY. Метод
as_view() создаёт callable для системы маршрутизации.
Пример 6: URL с параметрами (path-конвертеры)
# myapp/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('items/', views.item_list, name='item-list'),
path('items/<int:item_id>/', views.item_detail, name='item-detail'),
path('users/<str:username>/', views.user_profile, name='user-profile'),
path('docs/<path:doc_path>/', views.serve_doc, name='serve-doc'),
]
# myapp/views.py
from django.http import HttpResponse
def item_list(request):
return HttpResponse("Список товаров")
def item_detail(request, item_id):
return HttpResponse(f"Товар #{item_id}")
def user_profile(request, username):
return HttpResponse(f"Профиль пользователя: {username}")
def serve_doc(request, doc_path):
return HttpResponse(f"Документ: {doc_path}")
Встроенные path-конвертеры:
int (целые числа), str (строки без /), slug (слагифицированные строки), uuid (UUID), path (строки с /).