85 votes

Django ou Django Rest Framework

J'ai créé une certaine application en Django, et je sais que le cadre de repos Django est utilisé pour construire des API. Cependant, lorsque j'ai commencé à lire des informations sur Django Rest Framework sur leur site Web, j'ai remarqué que chaque élément de l'application était différent. Guide API (comme les demandes, les réponses, les vues, etc.) prétend qu'il est supérieur à Django (demandes, réponses, vues, etc.).

Ce que je ne comprends pas, c'est si ces API vont remplacer mes modèles, vues, etc. existants dans Django ou comment puis-je les utiliser différemment dans mon code Django existant ?

Je suis assez familier avec Django, mais je n'arrive pas à comprendre exactement ce qu'est le cadre de repos de Django, même après y avoir passé un certain temps. (Je sais qu'il est utilisé pour les API.) De plus, ai-je réellement besoin d'une API ? Mon application est capable d'envoyer des données au serveur sans API, alors dans quel cas aurais-je besoin d'une API ?

8 votes

Ils sont conçus pour fonctionner ensemble. DRF peut être construit au-dessus de vos modèles Django (et de l'authentification Django, etc.) - vous l'utilisez à la place des vues Django ordinaires aux endroits où vous voulez des points de terminaison API.

0 votes

@Anentropic Donc, si je construis mon application entièrement en DRF, les deux choses seront prises en charge (la construction de l'application elle-même et l'API).

0 votes

Essayez de lire les documents de la DRF, par exemple le tutoriel ici. django-rest-framework.org/tutorial/1-serialization/ ...il montre comment créer un modèle Django, puis des sérialiseurs DRF basés sur le modèle, puis des vues et enfin une API basée sur le modèle et les sérialiseurs.

45voto

J. Hesters Points 1446

Django Rest Framework permet d'utiliser facilement votre serveur Django comme une API REST.

REST signifie " concernant présentation s tate t ransfert" et API signifie a pplication p rogrammation i nterface.

Vous pouvez construire une api reposante à l'aide d'un Django classique, mais elle sera très peu soignée. DRF rend tout facile. Pour comparer, voici un simple GET-view utilisant Django normal, et un autre utilisant Django Rest Framework :

Régulier :

from django.core.serializers import serialize
from django.http import HttpResponse

class SerializedListView(View):
    def get(self, request, *args, **kwargs):
        qs = MyObj.objects.all()
        json_data = serialize("json", qs, fields=('my_field', 'my_other_field'))
        return HttpResponse(json_data, content_type='application/json')

Et avec DRF, cela devient :

from rest_framework import generics

class MyObjListCreateAPIView(generics.ListCreateAPIView):
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]
    serializer_class = MyObjSerializer

Notez qu'avec DRF, vous pouvez facilement avoir des vues de liste et de création ainsi que l'authentification.

27 votes

Votre deuxième exemple est incomplet car MyObjSerializer doit être défini quelque part, donc ce n'est pas aussi "facile" que le suggère l'exemple (vous ne pouvez pas vous en sortir sans énumérer les champs du modèle, etc. quelque part ). Il serait préférable d'insister sur le fait que vous pouvez réutiliser le sérialiseur personnalisé dans plusieurs vues. Ainsi, DRF aide à réutiliser le code en plus de générer automatiquement un grand nombre de points de terminaison, d'options de format, de versions...

33voto

aalberti333 Points 352

La nécessité d'une api dépend de ce que vous voulez faire. Par exemple, si vous voulez accéder à tous les éléments de vos modèles Django à partir d'un appareil mobile ET d'une application Web, vous devez utiliser DRF.

Pourquoi ? Prenons le cas où vous développez une application iOS dans laquelle les utilisateurs peuvent s'inscrire et où vous souhaitez utiliser Django comme backend. Si vous souhaitez également disposer d'un site web que les utilisateurs peuvent utiliser pour modifier les informations de leur profil d'application (par exemple, mettre à jour leur adresse électronique ou télécharger une photo), vous devez pouvoir partager les informations contenues dans vos modèles Django avec le site web. et l'appareil iOS. Comment cela peut-il être fait ? En donnant à l'utilisateur la possibilité de créer/lire/mettre à jour/supprimer des données en lui indiquant simplement une adresse URL à laquelle se rendre. Maintenant, si vous voulez accéder aux informations du modèle, vous pouvez le faire à partir de plusieurs appareils, puisque n'importe quel appareil peut visiter une URL.

Cependant, si vous construisez une application ou une page Web simple et que vous voulez tout conserver au même endroit, vous pouvez utiliser Django directement.

Remarque : il est généralement admis qu'il faut essayer de séparer le plus possible le frontend du backend. Dans ce cas, si vous souhaitez utiliser un framework de développement frontal comme React, Angular ou Vue, il sera difficile d'inclure toutes ces ressources dans les pages du modèle Django. même si vous ne voulez qu'une simple application web/page web. Dans ce cas, vous utiliserez DRF pour configurer votre backend, et vous n'aurez qu'à saisir les urls depuis le frontend en utilisant un outil comme axios. Dans ce scénario, votre frontend sera probablement hébergé sur quelque chose comme Node.

Encore une fois, ce que vous décidez d'utiliser dépend de ce que vous attendez de votre application/site et de votre degré d'aisance avec chaque outil.

21 votes

Cela n'explique pas vraiment pourquoi je préfère DRF à Django. Vous sous-entendez avec "En donnant à l'utilisateur la possibilité de créer/lire/mettre à jour/supprimer des données en lui indiquant simplement une url où aller" que DRF peut le faire mais pas Django, ce qui est bien sûr faux. Vous suggérez également que Django ne vous permet pas de séparer le front-end et le back-end, ce qui est également faux. Je pense que ce que je veux dire, c'est que vous n'expliquez pas vraiment comment DRF peut vous aider dans ces domaines par rapport à ce que vous pouvez faire avec Django, ce qui était le but de la question.

13voto

cyberspider789 Points 23

L'objectif fondamental de la DRF est de fournir des API. Les API sont le point de contact d'une application. Imaginez un projet dans lequel vous avez un assistant Django et quelqu'un dans votre équipe est un expert JavaScript et vous voulez développer une application mobile. L'expert JavaScript parle d'éléments web et de threading et l'expert Django parle de modèles et d'ORM, que faire ? L'API est votre réponse. Laissez l'expert de Django fournir des API et du JSON et laissez l'expert de JavaScript faire sa magie sur le front. La réponse la plus simple à laquelle je puisse penser.

5voto

Prateek Gupta Points 1462

En termes simples,

Django : Il fournit des fonctionnalités pour une application web standard

Cadre de repos Django : Il fournit des fonctionnalités pour construire une API REST standard.

2voto

Aram Simonyan Points 54

La vieille école a utilisé Jinja2 avec html5, css3, mais cela est devenu gênant lorsque Applications à page unique est devenu populaire. API permet de fournir des informations plus pratiques pour le programmeur frontal. Vous ne travaillez plus avec le frontend. Le site API est pratique pour développer des applications Web et des applications pour le téléphone.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X