[PYTHON] Créer une API RESTful avec Django Rest Framework

Aperçu

Cet article vous guide à travers les étapes d'un débutant développant un service de livraison de coupons pour l'iPhone avec une API RESTful et rapide. C'est une mise en œuvre très détour car elle a été mise en œuvre en examinant les éléments techniques un par un.

Dans la précédente Personnaliser librement TableView à l'aide de TableViewCell de Swift, l'application acquiert les informations de coupon gérées dans la base de données via l'API et les affiche sous forme de liste. Je l'ai créé au point de le faire.

Ensuite, nous modifierons cette API en une API RESTful. Afin de changer radicalement le code lors du remodelage, nous mettrons en œuvre une API qui ne répondra à toutes les informations de coupon avec GET qu'une seule fois, puis le modifierons afin qu'il réponde aux informations de coupon en fonction de la demande.

référence

environnement

Mac OS 10.15 VSCode 1.39.2 pipenv 2018.11.26 Python 3.7.4 Django 2.2.6

procédure

Installez le Framework Django Rest

Je crée un projet python (environnement virtuel) avec pipenv, alors installez-y le framework rest django. Entrez le shell pipenv et exécutez la commande install.

$ pipenv shell  #Entrez dans la coquille
$ pipenv install djangorestframework #Exécution de l'installation

Terminal en cours d'installation ... install-django-rest-framework.png

Si vous regardez dans le Pipfile une fois l'installation terminée, vous verrez que djangorest framework a été ajouté à [packages].


[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
django = "*"
djangorestframework = "*"

[requires]
python_version = "3.7"

Incorporer le framework Django Rest

Ajoutez simplement le rest_framework installé à ʻINSTALLED_APPS = { in setting.py` sous le répertoire du nom du projet.


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'coupon',
    'rest_framework', #ajouter à
]

Vous êtes maintenant prêt à utiliser le Django Rest Framework.

Définir un sérialiseur

Pour utiliser Rest Framework, vous avez besoin d'un module appelé Serializer. Créez et implémentez vous-même le fichier Serializer sous le répertoire de l'application.

Je l'ai implémenté comme suit.

coupon/serializer.py



from rest_framework import serializers #Importer Django Rest Framework
from .models import Coupon # models.Importer la classe de coupon de py

class CouponSerializer(serializers.ModelSerializer):
    class Meta:
        model = Coupon #Définir le nom du modèle à traiter
        fields = '__all__'

Dans le code ci-dessus, fields spécifie les champs du modèle (ici les informations de coupon) auxquels vous souhaitez répondre. Si vous souhaitez répondre à tous les éléments sans rien spécifier, utilisez `` __ all __ ''.

Modifier View.py

Modifiez views.py pour l'utiliser avec Django Rest Framework.

Le code ressemble à ceci: C'est très simple.

views.py


from django.shortcuts import render
from .models import Coupon
from rest_framework import viewsets, filters
from .serializer import CouponSerializer


class CouponViewSet(viewsets.ModelViewSet):
    queryset = Coupon.objects.all() #Obtenez toutes les données
    serializer_class = CouponSerializer

Définir URL_pattern

Modifiez ʻami_coupon_api / urls.pyetcoupon / urls.py. En fait, il semble préférable de modifier à partir de coupon / urls.py`.

Le contenu édité de coupon / urls.py est le suivant.

coupon/urls.py


from django.urls import path
from . import views
from rest_framework import routers
from .views import CouponViewSet

router = routers.DefaultRouter()
router.register(r'coupons', CouponViewSet)

Dans ce qui précède, la partie `` coupons '' de `r'coupons '' est ajoutée après l'URL de la demande.

Le contenu édité de ʻami_coupon_api / urls.py` est le suivant.

ami_coupon_api/urls.py


from django.contrib import admin
from django.urls import path,include
from django.conf.urls import url, include
from coupon.urls import router as coupon_router

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^api/', include(coupon_router.urls)),
]

Vérifiez le fonctionnement à l'aide de la commande curl

Ouvrez un nouveau terminal et essayez les requêtes GET, POST, PUT. Comment rédiger une requête est la suivante. -X est une option pour spécifier les méthodes HTTP (GET, POST, PUT, etc.). Notez que GET et POST peuvent être exécutés sans spécifier.

$ curl -X [Méthode HTTP] [URL] [Paramètres de demande]

Essayez GET. Aucun paramètre de demande n'est joint.

$ curl -X GET http://127.0.0.1:8000/api/coupons/

Ce json est retourné.


[{"id": 1, "code": "0001", "avantage": "1 000 yens de remise sur le paiement", "explication": "Limité aux clients utilisant 5 000 yens ou plus. Ne peut être utilisé avec d'autres coupons. "," store ":" Tous les magasins "," start ":" 2019-10-01 "," date limite ":" 2019-12-31 "," status ": true}, {" id ": 2," code ":" 0002 "," beneficier ":" 10% sur votre facture! "," Explication ":" Ne peut être combiné avec d'autres coupons "," store ":" Yurakucho store "," start ":" 2019-10 -01 "," date limite ":" 2019-12-31 "," status ": true}, {" id ": 3," code ":" 0003 "," bénéfice ":" [Halloween uniquement] Déguisement 30% de réduction lorsque vous venez au magasin "," explication ":" Uniquement pour les clients qui sont déguisés en 50% ou plus de tout le corps (le jugement est le sentiment du personnel). Ne peut être utilisé avec d'autres coupons "," magasin ":" Boutique Kanda "," start ":" 2019-10-31 "," date limite ":" 2019-10-31 "," status ": true}, {" id ": 4," code ":" 0004 ", "avantage": "[septembre uniquement] Service de boulettes d'observation de la lune", "explication": "Donnant une boulette d'observation de la lune aux clients qui le souhaitent! Peut être utilisé en combinaison avec d'autres coupons!", "Magasin": "Tous les magasins" , "start": "2019-09-01", "date limite": "2019-09-30", "status": true}, {"id": 5, "code": "0005", "avantage" : "[Jours de pluie uniquement] 15% de réduction sur le paiement", "explication": "Disponible uniquement lorsque les coupons sont livrés. Ne peut être combiné avec d'autres coupons", "magasin": "Tous les magasins", "démarrer" ":" 01/10/2019 "," date limite ":" 31/12/2019 "," status ": false}, {" id ": 6," code ":" 0006 "," avantage ":" [ Dimanche seulement] Cheers Tequila service "," explication ":" Nous servirons Tequila pour le nombre de personnes. Peut être utilisé avec d'autres coupons. "," Store ":" Kanda store "," start ":" 2019-11-03 " , "ré eadline ":" 2019-12-01 "," status ": true}]


Essayez POST.

curl -X POST http://127.0.0.1:8000/api/coupons/ -d "code=0007" -d "benefit=À partir du paiement 19%tirer" -d "explanation=Limité du 29 décembre au 31 décembre." -d "store=Magasin de Kanda" -d "start=2019-12-29" -d "deadline=2019-12-31" -d "status=true"

Si tout se passe bien, les données POSTées seront renvoyées dans json.


{"id": 7, "code": "0007", "bénéficier": "19% de remise à la caisse", "explication": "29-31 décembre uniquement.", "store": "Kanda store", "start": "2019-12-29", "date limite": "2019-12-31", "status": true}


Essayez PUT. Au moment de PUT, il est nécessaire de spécifier la méthode HTTP. Plus important encore, vous devez ** spécifier la clé primaire de la table dans l'URL **. Dans le modèle de coupon, "id" est la clé primaire, spécifiez donc l'ID des données que vous souhaitez écraser (7 dans ce cas) à la fin de l'URL.

curl -X PUT http://127.0.0.1:8000/api/coupons/7/ -d "code=0007" -d "benefit=À partir du paiement 19%tirer" -d "explanation=Limité du 29 décembre au 31 décembre. Ne peut pas être utilisé avec d'autres coupons" -d "store=Magasin de Kanda" -d "start=2019-12-29" -d "deadline=2019-12-31" -d "status=true"

Si tout se passe bien, les données écrasées seront renvoyées dans json.


{"id": 7, "code": "0007", "bénéficier": "19% de remise sur le paiement", "explication": "Du 29 décembre au 31 décembre uniquement. Combiné avec d'autres coupons Impossible "," store ":" Kanda store "," start ":" 2019-12-29 "," date limite ":" 2019-12-31 "," status ": true}


Essayez DELETE. Exécutez à nouveau la demande POST pour créer un coupon avec id = 8. Assurez-vous que le coupon id = 8 a été ajouté dans la requête GET ou dans la console du serveur Django.

Ensuite, supprimez le coupon avec id = 8 dans la demande ci-dessous. Comme pour PUT, il est nécessaire de spécifier la clé primaire du coupon à supprimer.

curl -X DELETE http://127.0.0.1:8000/api/coupons/8/

Si tout se passe bien, rien ne sera retourné. Assurez-vous que le coupon id = 8 a été supprimé dans la requête GET ou dans la console du serveur Django.

Jusqu'à présent, le cadre de repos de base est terminé. À partir de là, nous ajouterons des filtres et des fonctions d'authentification pour obtenir uniquement les coupons qui remplissent les conditions. ](Https://qiita.com/Ajyarimochi/items/7e22de20292ca57ea8dc)

Recommended Posts

Créer une API RESTful avec Django Rest Framework
Créer une API autour de l'authentification des utilisateurs avec Django REST Framework
Framework Django REST avec Vue.js
Connectez-vous avec Django Rest Framework
Créer une application Todo avec Django REST Framework + Angular
Essayez de créer une application Todo avec le framework Django REST
[Django] Utiliser MessagePack avec le framework Django REST
CRUD GET avec Nuxt & Django REST Framework ②
CRUD POST avec Nuxt & Django REST Framework
CRUD GET avec Nuxt & Django REST Framework ①
Créer une API REST pour faire fonctionner dynamodb avec le Framework Django REST
Bases du framework Django REST
Astuces Django Rest Framework
CRUD PUT, DELETE avec Nuxt & Django REST Framework
Implémentation de la fonction d'authentification dans Django REST Framework à l'aide de djoser
Plus de nouvelles méthodes d'authentification des utilisateurs avec Django REST Framework
Créer une API avec Django
Créer une page d'accueil avec django
Lorsque vous souhaitez filtrer avec le framework Django REST
Implémentez l'API à une vitesse explosive en utilisant Django REST Framework
Bloc d'achoppement du framework Django REST
Implémenter des URL hiérarchiques avec des routeurs imbriqués drf dans le framework Django REST
Créer un téléchargeur de fichiers avec Django
Implémentation de CRUD à l'aide de l'API REST avec Python + Django Rest framework + igGrid
Suppression logique dans Django, DRF (Django REST Framework)
Comprendre la commodité de Django Rest Framework
Un outil administratif qui peut être créé immédiatement avec le framework ng-admin + Django REST
Notes diverses sur le framework Django REST
Créer un écran de mise à jour avec Django Updateview
Création de la première application avec Django startproject
Django REST Framework + Considération de conception d'architecture propre
Comment gérer les caractères déformés dans json de Django REST Framework
Je souhaite créer une API qui retourne un modèle avec une relation récursive dans Django REST Framework
Internationalisation avec Django
Comment générer automatiquement un document API avec le framework Django REST et POST à partir de l'écran de document
Créez un tableau de bord pour les appareils réseau avec Django!
Créer un environnement de Nginx + uWSGI + Python (Django) avec docker
Framework Django REST Un peu utile à savoir.
CRUD avec Django
Créez une application Hello World avec un seul fichier avec django
Implémenter la fonctionnalité de connexion JWT dans le framework Django REST
Comment créer une API Rest dans Django
Parfois, vous souhaitez accéder aux informations de vue depuis Serializer avec DRF (Django REST Framework)
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 1 ~
Créer une fonction Lambda de version Python (+ couche Lambda) avec Serverless Framework
List, méthode pour les ressources imbriquées dans le framework Django REST
Créer une application Todo avec Django ③ Créer une page de liste de tâches
[Django Rest Framework] Personnalisez la fonction de filtre à l'aide de Django-Filter
Créez dynamiquement des tables dans un schéma avec Django, générez dynamiquement des modèles
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 2 ~
Créer une application Todo avec Django ⑤ Créer une fonction d'édition de tâches
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 3 ~
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 4 ~
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 5 ~
Créer un environnement django avec docker-compose (MariaDB + Nginx + uWSGI)
Django 1.11 a démarré avec Python3.6
Résumé du développement avec Django
Créer un planning Django
Framework Web Django Python
Sortie PDF avec Django