🛰️ BaseViewSet - Vue générique pour Django REST Framework

Ce BaseViewSet fournit une base stable, réutilisable et extensible pour construire des APIs Django REST prêtes à la consommation par un frontend VueJS.
Il suit les règles de codage NASA, le principe DRY et une logique orientée scalabilité et sécurité.


🚀 Fonctionnalités clés

  • 🔁 Filtrage dynamique par URL (restaurant_pk, menu_pk, etc.)

  • 🔍 Recherche avancée via endpoint /search/ sur les champs définis

  • 📄 Schéma JSON automatique pour le frontend (/schema)

  • Création avec clés étrangères automatiques

  • 🔐 Robuste et sécurisé (validations strictes, erreurs explicites)

  • 📦 Pagination conditionnelle (?pagination=false pour désactiver)


🔧 Utilisation

1. Héritez de BaseViewSet

class ProductViewSet(BaseViewSet):
    model = Product
    serializer_class = ProductSerializer
    queryset = Product.objects.all()

    filter_mapping = {
        'restaurant_pk': 'restaurant_id',
        'category_pk': 'category_id',
    }

    extra_search_fields = ['name', 'description']

2. Exemple de route

router.register(
    r'restaurants/(?P<restaurant_pk>[^/.]+)/products',
    ProductViewSet,
    basename='restaurant-products'
)

📡 Endpoints disponibles

/schema/

Renvoie automatiquement une description des champs disponibles dans le serializer, utile pour le frontend.


📁 Extension

Vous pouvez surcharger :

  • get_additional_filters() : pour ajouter des filtres personnalisés,

  • filter_mapping : pour mapper les paramètres d’URL aux champs,

  • extra_search_fields : pour autoriser d’autres champs dans la recherche.


🧠 Bonnes pratiques

  • Déclarez toujours model et serializer_class dans vos ViewSets enfants.

  • Utilisez des filter_mapping cohérents avec votre schéma de données.

  • Gardez vos modèles simples, vos serializers explicites.


📜 Licence

MIT — Réutilisable dans tous vos projets pro/perso.