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.
Mac OS 10.15 VSCode 1.39.2 pipenv 2018.11.26 Python 3.7.4 Django 2.2.6
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 ...
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"
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.
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 __ ''.
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
Modifiez ʻami_coupon_api / urls.pyet
coupon / 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.
router.register
.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.
django.conf.urls
coupon / urls.py
comme coupon_routerami_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)),
]
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