12 промтов для Django: от моделей до REST API
Django — мощный бэкенд-фреймворк, но рутинный код (модели, вьюхи, сериализаторы) съедает время. Современные нейросети умеют генерировать этот код, если дать чёткий промт. В этой статье — 12 готовых промтов, которые я использую в работе с Django. Они покрывают полный цикл: от моделей до REST API. Все примеры базируются на официальной документации Django (docs.djangoproject.com) и Django REST Framework (django-rest-framework.org).
1. Генерация модели
Промт:
Создай модель Django для [сущность]. Укажи поля: [поля]. Добавь Meta-класс, str, get_absolute_url и уникальные ограничения.
Пример:
class Article(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(unique=True)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['-created_at']
def get_absolute_url(self):
return f'/articles/{self.slug}/'
2. Оптимизированные ORM-запросы
Промт:
Напиши ORM-запрос для [задача]. Используй select_related, prefetch_related, annotate. Добавь комментарии.
Пример:
articles = Article.objects.select_related('author').prefetch_related('comments').annotate(comments_count=Count('comments'))
3. Class-Based Views
Промт:
Создай ListView, DetailView, CreateView для [модель]. Добавь LoginRequiredMixin, поля form, success_url.
Пример:
class ArticleListView(ListView):
model = Article
paginate_by = 10
template_name = 'blog/article_list.html'
4. Сериализаторы DRF
Промт:
Создай сериализатор DRF для [модель]. Добавь валидаторы, вложенные сериализаторы, методы create/update.
Пример:
class ArticleSerializer(serializers.ModelSerializer):
author = UserSerializer(read_only=True)
class Meta:
model = Article
fields = ['id', 'title', 'content', 'author']
5. ViewSet и Router
Промт:
Создай ModelViewSet для [модель] с кастомным действием. Зарегистрируй через DefaultRouter.
Пример:
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
@action(detail=False, methods=['post'])
def publish(self, request):
pass
6. JWT-аутентификация
Промт:
Настрой JWT в DRF: установи simplejwt, добавь в settings, создай urls для token_obtain_pair и token_refresh, защити эндпоинты.
Пример:
INSTALLED_APPS += ['rest_framework_simplejwt']
REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] = ('rest_framework_simplejwt.authentication.JWTAuthentication',)
7. Management-команды
Промт:
Создай management-команду для [задача]. Используй BaseCommand, аргументы, вывод через self.stdout.
Пример:
class Command(BaseCommand):
def handle(self, *args, **options):
self.stdout.write('Done')
8. Тесты
Промт:
Напиши pytest-тесты для [модуль]. Покрой модель, вьюху, API. Используй fixture и Client.
Пример:
def test_article_detail(client):
response = client.get(f'/articles/{article.slug}/')
assert response.status_code == 200
9. Оптимизация запросов
Промт:
Проанализируй код [код]. Найди N+1. Предложи исправления с select_related, prefetch_related, индексами.
Пример:
# до: articles = Article.objects.all() — N+1 в цикле
# после: articles = Article.objects.select_related('author')
10. Админка
Промт:
Настрой ModelAdmin: list_display, list_filter, search_fields, prepopulated_fields, inlines.
Пример:
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'created_at')
prepopulated_fields = {'slug': ('title',)}
11. Сигналы
Промт:
Создай сигнал post_save для [модель]. Подключи через AppConfig.ready(). Объясни, когда сигнал лучше save().
Пример:
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
12. API с фильтрацией и пагинацией
Промт:
Создай DRF API с django-filter, SearchFilter и PageNumberPagination. Настрой фильтры и пагинацию.
Пример:
class ArticleFilter(django_filters.FilterSet):
class Meta:
model = Article
fields = {'author': ['exact'], 'created_at': ['lte', 'gte']}
Заключение
Эти 12 промтов ускоряют разработку на Django: от моделей до REST API. Скопируйте, адаптируйте под свой проект и всегда проверяйте результат. Подписывайтесь на блог asibiont.com/blog, чтобы получать больше решений для бэкенда.
Комментарии