Django — один из самых мощных и популярных бэкенд-фреймворков на Python. Но даже опытные разработчики тратят часы на рутинные задачи: написание моделей, сериализаторов, вьюх. А что если нейросеть возьмёт на себя часть этой работы? Я собрал 15 промтов, которые ускорят вашу разработку на Django — от проектирования моделей до оптимизации API. Никакой магии, только проверенные техники и примеры кода.
Базовые промты: модели и миграции
1. Проектирование модели по описанию
Промт:
"Создай модель Django для [сущности] с полями: [перечислите поля и типы]. Добавь методы str, Meta, индексы и связи с другими моделями."
Пример:
"Создай модель Django для блога с полями: title (строка), content (текст), author (ForeignKey на User), created_at (дата), published (булево). Добавь методы str, Meta, индексы и связь с комментариями."
Результат:
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
published = models.BooleanField(default=False)
class Meta:
indexes = [
models.Index(fields=['created_at']),
]
ordering = ['-created_at']
def __str__(self):
return self.title
class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
text = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
Почему это работает: нейросеть понимает стандартные паттерны Django ORM и генерирует код, соответствующий официальной документации docs.djangoproject.com.
2. Генерация миграций по изменениям модели
Промт:
"Сгенерируй миграцию Django для добавления поля [поле] в модель [модель]. Учти, что поле должно иметь значение по умолчанию для существующих записей."
Пример:
"Сгенерируй миграцию Django для добавления поля is_active (BooleanField, default=True) в модель UserProfile."
Результат:
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('myapp', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='userprofile',
name='is_active',
field=models.BooleanField(default=True),
),
]
Совет: После генерации обязательно запустите python manage.py makemigrations и migrate, чтобы применить изменения в реальной БД.
3. Написание сложных ORM-запросов
Промт:
"Напиши ORM-запрос Django для [задача]. Используй агрегации, аннотации и оптимизацию с select_related/prefetch_related."
Пример:
"Напиши ORM-запрос Django для получения топ-5 авторов по количеству постов за последний месяц."
Результат:
from django.db.models import Count, Q
from datetime import timedelta
from django.utils import timezone
month_ago = timezone.now() - timedelta(days=30)
top_authors = User.objects.filter(
posts__created_at__gte=month_ago
).annotate(
post_count=Count('posts')
).order_by('-post_count')[:5]
Продвинутые промты: views и сериализаторы
4. Классовые вьюхи с миксинами
Промт:
"Создай view Django для [сущность] с использованием generics или миксинов. Поддержи операции CRUD."
Пример:
"Создай ListView и DetailView для модели Post с пагинацией."
Результат:
from django.views.generic import ListView, DetailView
from .models import Post
class PostListView(ListView):
model = Post
template_name = 'blog/post_list.html'
context_object_name = 'posts'
paginate_by = 10
class PostDetailView(DetailView):
model = Post
template_name = 'blog/post_detail.html'
5. Сериализатор DRF с валидацией
Промт:
"Напиши сериализатор Django REST Framework для модели [модель]. Добавь валидацию полей и кастомные методы."
Пример:
"Напиши сериализатор DRF для модели Post с валидацией длины title и полем author_name (read-only)."
Результат:
from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
author_name = serializers.CharField(source='author.username', read_only=True)
class Meta:
model = Post
fields = ['id', 'title', 'content', 'author_name', 'created_at', 'published']
def validate_title(self, value):
if len(value) < 5:
raise serializers.ValidationError("Заголовок должен быть не короче 5 символов.")
return value
6. ViewSet с кастомными действиями
Промт:
"Создай ViewSet для модели [модель] и добавь кастомное действие [действие]."
Пример:
"Создай ViewSet для модели Post и добавь действие publish, которое устанавливает published=True."
Результат:
from rest_framework import viewsets, status
from rest_framework.decorators import action
from rest_framework.response import Response
from .models import Post
from .serializers import PostSerializer
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
@action(detail=True, methods=['post'])
def publish(self, request, pk=None):
post = self.get_object()
post.published = True
post.save()
return Response({'status': 'published'}, status=status.HTTP_200_OK)
Экспертные промты: API, оптимизация и безопасность
7. Оптимизация запросов с select_related
Промт:
"Оптимизируй запрос Django, который вызывает N+1 проблему. Используй select_related и prefetch_related."
Пример:
"Оптимизируй запрос, который выводит список постов с авторами и комментариями."
Результат:
posts = Post.objects.select_related('author').prefetch_related('comments')
8. Кастомная аутентификация в DRF
Промт:
"Реализуй JWT-аутентификацию в Django REST Framework. Опиши настройку в settings.py и использование."
Результат:
Установите djangorestframework-simplejwt и добавьте в settings.py:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
),
}
Затем добавьте URL'ы в urls.py:
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
urlpatterns = [
path('api/token/', TokenObtainPairView.as_view()),
path('api/token/refresh/', TokenRefreshView.as_view()),
]
9. Пагинация и фильтрация в DRF
Промт:
"Настрой пагинацию и фильтрацию для API на Django REST Framework. Используй django-filter."
Результат:
В settings.py:
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 20,
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
}
В views.py:
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import viewsets
from .models import Post
from .serializers import PostSerializer
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = ['author', 'published']
10. Кэширование для высоконагруженных API
Промт:
"Добавь кэширование в Django REST Framework для GET-запросов. Используй cache_page или низкоуровневое кэширование."
Пример:
from django.utils.decorators import method_decorator
from django.views.decorators.cache import cache_page
from rest_framework.views import APIView
from rest_framework.response import Response
class PostListAPIView(APIView):
@method_decorator(cache_page(60 * 15))
def get(self, request):
posts = Post.objects.all()
serializer = PostSerializer(posts, many=True)
return Response(serializer.data)
11. Безопасность: защита от SQL-инъекций и XSS
Промт:
"Проверь код Django на наличие уязвимостей и предложи исправления. Используй безопасные методы ORM и экранирование."
Результат:
Используйте ORM вместо raw SQL:
# Опасно (raw SQL)
cursor.execute("SELECT * FROM auth_user WHERE username = '%s'" % username)
# Безопасно (ORM)
User.objects.filter(username=username)
Для защиты от XSS в шаблонах используйте {{ value|escape }} — Django делает это автоматически.
12. Документирование API с OpenAPI
Промт:
"Сгенерируй OpenAPI-схему для Django REST Framework проекта. Опиши настройку и использование."
Результат:
Установите drf-spectacular и добавьте в settings.py:
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
}
В urls.py:
from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView
urlpatterns = [
path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
path('api/docs/', SpectacularSwaggerView.as_view(url_name='schema'), name='docs'),
]
13. Фоновые задачи с Celery
Промт:
"Интегрируй Celery в Django для выполнения фоновых задач. Напиши пример task."
Результат:
Установите celery и создайте myapp/tasks.py:
from celery import shared_task
@shared_task
def send_welcome_email(user_id):
from .models import User
user = User.objects.get(id=user_id)
# логика отправки
В settings.py:
CELERY_BROKER_URL = 'redis://localhost:6379/0'
14. Дебаг и профайлинг Django-приложений
Промт:
"Опиши методы дебага Django-приложения, включая Django Debug Toolbar и профайлинг запросов."
Результат:
Установите django-debug-toolbar и добавьте в settings.py:
INSTALLED_APPS = ['debug_toolbar', ...]
MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware', ...]
INTERNAL_IPS = ['127.0.0.1']
Для профайлинга используйте django-silk или встроенный cProfile.
15. Миграция на Django 5
Промт:
"Составь план миграции с Django 4 на Django 5. Укажи основные изменения и возможные проблемы."
Результат:
Согласно официальному руководству по переходу docs.djangoproject.com, ключевые изменения включают:
- Поддержка Python 3.10+;
- Новые возможности ORM (например, Q objects с |);
- Устаревшие функции, такие как django.utils.timezone.utc (используйте datetime.timezone.utc).
Итоги
Эти 15 промтов покрывают 90% рутинных задач Django-разработчика. Используйте их как отправную точку, но всегда проверяйте сгенерированный код и адаптируйте под свой проект. Нейросети — отличные помощники, но ответственность за качество кода лежит на вас. Подписывайтесь на наш блог, чтобы получать больше практических материалов по Python и Django!
Комментарии