Je suis débutant dans le framework Django REST et j'ai besoin de vos conseils. Je développe un service web. Le service doit fournir une interface REST aux autres services. L'interface REST, que je dois implémenter, ne fonctionne pas directement avec mes modèles (j'entends les opérations get, put, post, delete). Au lieu de cela, il fournit d'autres services avec quelques résultats de calcul. Sur une demande mon service fait quelques calculs et retourne juste les résultats en arrière (ne stocke pas les résultats dans sa propre base de données).Cadre Django REST: sérialiseur non-modèle
Voici ma compréhension de la façon dont cette interface REST pourrait être implémentée. Corrigez-moi si je me trompe.
- Créer une classe qui effectue les calculs. Nommez-le 'CalcClass'. CalcClass utilise les modèles dans son travail.
- Les paramètres nécessaires pour les calculs sont transmis au constructeur.
- Implémentez l'opération de calcul. Il renvoie les résultats en tant que 'ResultClass'.
- Créer une classe de résultats.
- Dérivé de l'objet.
- Il a seulement des attributs contenant les résultats de calc.
- Une partie des résultats de calc est représentée par un tuple de tuples. Si je comprends bien, il serait préférable pour la sérialisation ultérieure d'implémenter une classe séparée pour ces résultats et ajouter la liste de ces objets à ResultClass.
- Créer un sérialiseur pour ResultClass.
- Dérivé des sérialiseurs.Serializer.
- Les résultats du calcul sont en lecture seule, utilisez donc principalement la classe Field pour les champs, au lieu de classes spécialisées, telles que IntegerField.
- Je ne devrais impliquer la méthode save() ni sur ResultClass, ni sur Serializer, car je ne vais pas stocker les résultats (je veux juste les retourner sur demande).
- Implémentation sérialiseur pour les résultats imbriqués (se souvenir de l'uplet des tuples mentionnés ci-dessus).
- Créer Afficher pour afficher les résultats de calcul.
- Dérivé de APIView.
- Besoin d'obtenir juste().
- Dans get(), créez CalcClass avec les paramètres extraits de la requête, appelez calc(), obtenez ResultClass, créez Serializer et transmettez-lui la classe ResultClass, renvoyez la réponse (serializer.data).
- URL
- Il n'y a pas de racine api dans mon cas. Je devrais juste avoir des URL pour obtenir différents résultats de calcul (calc avec diff params).
- Ajout de l'appel de format_suffix_patterns pour la navigation sur API.
Ai-je raté quelque chose? L'approche est-elle correcte en général?
Salut Gabriel! Merci pour votre réponse! J'ai déjà mis en place ce dont j'ai besoin selon mon plan. Fonctionne bien! J'ai utilisé le sérialiseur pour une meilleure sortie JSON. – Zakhar
Merci beaucoup, il a sauvé ma journée. Cela devrait faire partie de la documentation. – neelix
J'ai essayé de suivre cette suggestion mais j'ai: "Impossible d'appliquer DjangoModelPermissions sur une vue qui n'a pas de propriété' .model' ou '.queryset'.". J'ai essayé l'exemple exact fourni. Serait-ce quelque chose avec la version récente de django-rest-framework? – Orlando