django-drf

Django REST Framework patterns. Trigger: When implementing generic DRF APIs (ViewSets, serializers, routers, permissions, filtersets). For Prowler API specifics (RLS/RBAC/Providers), also use prowler-api.

By prowler-cloud · 470 installs

npx skills add prowler-cloud/prowler --skill django-drf

Source repository · Upstream listing

Critical Patterns ALWAYS separate serializers by operation: Read / Create / Update / Include ALWAYS use filterset class for complex filtering (not filterset fields ) ALWAYS validate unknown fields in write serializers (inherit BaseWriteSerializer ) ALWAYS use select related / prefetch related in get queryset() to avoid N+1 ALWAYS handle swagger fake view in get queryset() for schema generation ALWAYS use @extend schema field for OpenAPI docs on SerializerMethodField NEVER put business logic in serializers use services/utils NEVER use auto increment PKs use UUIDv4 or UUIDv7 NEVER use trailing slashes in URLs ( trailing slash=False ) Note: swagger fake view is specific to drf spectacular for OpenAPI schema generation. Implementation Checklist When implementing a new endpoint, review these patterns in order: Pattern Reference Key Points 1 Models api/models.py UUID PK, inserted at / updated at , JSONAPIMeta.resource name 2 ViewSets api/base views.py , api/v1/views.py Inherit BaseRLSViewSet , get queryset() with N+1 prevention 3 Serializers api/v1/serializers.py Separate Read/Create/Update/Include, inherit BaseWriteSerializer 4 Filters api/filters.py Use filterset class , inherit base filter classes 5 Permissions api/base views.py required permissions , set required permissions() 6 Pagination api/pagination.py Custom pagination class if needed 7 URL Routing api/v1/urls.py trailing slash=False , kebab case paths 8 OpenAPI Schema api/v1/views.py @extend schema view with drf spectacular 9 Tests api/tests/test views.py JSON:API content type, fixture patterns Full file paths : See [references/file locations.md](references/file locations.md) Decision Trees Which Serializer? Which Base Serializer? Which Filter Base? Which Base ViewSet? Resource Name Format? Serializer Patterns Base Class Hierarchy SerializerMethodField with OpenAPI Included Serializers (JSON:API) Sensitive Data Masking ViewSet Patterns get queryset() with N+1 Prevention Always combine swagger fake view check with select related / prefetch related : Why swagger fake view? drf spectacular introspects ViewSets to generate OpenAPI schemas. Without this check, it executes real queries and can fail without request context. Action Specific Serializers Dynamic Permissions per Action Cache Decorator Custom Actions Filter Patterns Base Filter Classes Custom Multi Value Filters ArrayField Filtering Date Range Validation Dynamic FilterSet Selection Enum Field Override Performance Patterns PaginateByPkMixin For large querysets with expensive joins: Prefetch in Serializers Naming Conventions Entity Pattern Example Serializer (read) <Model Serializer ProviderSerializer Serializer (create) <Model CreateSerializer ProviderCreateSerializer Serializer (update) <Model UpdateSerializer ProviderUpdateSerializer Serializer (include) <Model IncludeSerializer ProviderIncludeSerializer Filter <Model Filter ProviderFilter ViewSet <Model ViewSet ProviderViewSet OpenAPI Documentation API Security Patterns Full examples : See [assets/security patterns.py](assets/security patterns.py) Pattern Key Points Input Validation Use validate <field () for sanitization, validate() for cross field Prevent Mass Assignment ALWAYS use explicit fields list, NEVER all or exclude Object Level Permissions Implement has object permission() for ownership checks Rate Limiting Configure DEFAULT THROTTLE RATES , use per view throttles for sensitive endpoints Prevent Info Disclosure Generic error messages, return 404 not 403 for unauthorized (prevents enumeration) SQL Injection ALWAYS use ORM parameterization, NEVER string interpolation in raw SQL Quick Reference Commands Resources Local References File Locations : See [references/file locations.md](references/file locations.md) JSON:API Conventions : See [references/json api conventions.md](references/json api conventions.md) Security Patterns : See [assets/security patterns.py](assets/security patterns.py) Context7 MCP (Recommended) Prerequisite: Install Context7 MCP server for up to date documentation lookup. When implementing or debugging, query these libraries via mcp context7 query docs : Library Context7 ID Use For Django /websites/djangoproject en 5 2 Models, ORM, migrations DRF /websites/django rest framework ViewSets, serializers, permissions drf spectacular /tfranzel/drf spectacular OpenAPI schema, @extend schema Example queries: Note: Use mcp context7 resolve library id first if you need to find the correct library ID. External Docs DRF Docs : https://www.django rest framework.org/ DRF JSON:API : https://django rest framework json api.readthedocs.io/ drf spectacular : https://drf spectacular.readthedocs.io/ django filter : https://django filter.readthedocs.io/