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 à d'autres services. L'interface REST, que je dois implémenter, ne fonctionne pas directement avec mes modèles (je veux dire les opérations get, put, post, delete). Au lieu de cela, il fournit d'autres services avec des résultats de calcul. Sur demande, mon service effectue des calculs et renvoie simplement les résultats (ne stocke pas les résultats dans sa propre base de données).
Voici ma compréhension de la façon dont cette interface REST pourrait être implémentée. Corrigez-moi si je me trompe.
- Créez une classe qui effectue les calculs. Nommez-le «CalcClass». CalcClass utilise les modèles dans son travail.
- Les paramètres nécessaires aux calculs sont transmis au constructeur.
- Implémentez l'opération calc. Il renvoie les résultats sous la forme «ResultClass».
- Créez ResultClass.
- Dérivé de l'objet.
- Il n'a que des attributs contenant les résultats de calcul.
- Une partie des résultats de calcul est représentée sous forme de tuple de tuples. Si je comprends bien, il serait préférable pour une sérialisation ultérieure d'implémenter une classe distincte pour ces résultats et d'ajouter une liste de ces objets à ResultClass.
- Créez un sérialiseur pour ResultClass.
- Dériver des sérialiseurs.Serializer.
- Les résultats de 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 pas impliquer la méthode save () ni sur ResultClass, ni sur Serializer, car je ne vais pas stocker les résultats (je veux juste les renvoyer sur demande).
- Sérialiseur d'impl pour les résultats imbriqués (rappelez-vous le tuple de tuples mentionné ci-dessus)
- Créer une vue pour renvoyer les résultats du calcul.
- Dérivé d'APIView.
- Besoin juste d'obtenir ().
- Dans get (), créez CalcClass avec les paramètres extraits de la requête, appelez son calc (), récupérez ResultClass, créez Serializer et passez-lui la ResultClass, retournez Response (serializer.data).
- URL
- Il n'y a pas de racine api dans mon cas. Je devrais juste avoir des URL pour obtenir divers résultats de calcul (calc avec des paramètres de diff).
- Ajoutez un appel à format_suffix_patterns pour la navigation dans l'API.
Ai-je oublié quelque chose? L'approche est-elle correcte en général?
django
rest
django-rest-framework
Zakhar
la source
la source
Réponses:
Django-rest-framework fonctionne bien même sans le lier à un modèle. Votre approche semble correcte, mais je pense que vous pouvez réduire certaines étapes pour que tout fonctionne.
Par exemple, le cadre de repos est livré avec quelques moteurs de rendu intégrés. Prêt à l'emploi, il peut renvoyer JSON et XML au consommateur d'API. Vous pouvez également activer YAML en installant simplement le module python requis. Django-rest-framework affichera n'importe quel objet de base comme dict, list et tuple sans aucun travail supplémentaire de votre part.
Donc, fondamentalement, vous n'avez qu'à créer la fonction ou la classe qui prend les arguments, effectue tous les calculs requis et renvoie ses résultats dans un tuple à la vue API REST. Si JSON et / ou XML répond à vos besoins, django-rest-framework se chargera de la sérialisation pour vous.
Vous pouvez ignorer les étapes 2 et 3 dans ce cas et utiliser simplement une classe pour les calculs et une pour la présentation au consommateur d'API.
Voici quelques extraits qui peuvent vous aider:
Veuillez noter que je n'ai pas testé cela. Cela ne sert qu'à titre d'exemple, mais cela devrait fonctionner :)
La CalcClass:
La vue REST:
Vos urls.py:
Ce code doit générer une liste de listes lorsque vous accédez à http://example.com/api/v1.0/resource/?format=json . Si vous utilisez un suffixe, vous pouvez le remplacer
?format=json
par.json
. Vous pouvez également spécifier l'encodage que vous souhaitez récupérer en ajoutant"Content-type"
ou"Accept"
aux en-têtes.J'espère que cela vous aidera.
la source
.model
ni.queryset
propriété.". J'ai essayé l'exemple exact fourni. Serait-ce quelque chose avec la version récente de django-rest-framework?Dans urls.py, la fonction login_required nécessite
la source
add a comment
session