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. Puisqu'elle a été mise en œuvre en examinant les éléments techniques un par un, c'est une mise en œuvre très détour.
Correspond aux paramètres du champ spécifié à l'aide du filtrage générique dans le précédent Définir le filtre pour qu'il ne réponde qu'à des données spécifiques dans Django Rest Framework. J'ai pu filtrer les données. Cependant, avec cette méthode, il n'est pas possible de filtrer les paramètres spécifiés dans les conditions «supérieur ou égal à» et «inférieur ou égal à».
Par conséquent, cette fois, nous mettrons en œuvre une fonction de filtre qui détermine la date d'expiration en fonction de conditions telles que «avant» et «après» pour la date.
Si vous n'avez pas installé Django-Filter
, veuillez l'installer en vous référant à Article précédent.
Mac OS 10.15 VSCode 1.39.2 pipenv 2018.11.26 Python 3.7.4 Django 2.2.6
Créez un jeu de filtres d'origine en héritant de la classe FilterSet de django_filter. Tout d'abord, ajoutez un processus pour importer la classe FilterSet.
from django_filters import rest_framework as filters
Ensuite, implémentez le jeu de filtres d'origine avant la classe ViewSet.
class CustomFilter(filters.FilterSet):
#Définition du filtre
deadline = filters.DateFilter(field_name='deadline', lookup_expr='gte')
class Meta:
model = Coupon
fields = ['deadline'] #Énumérer les filtres définis
La partie suivante est le réglage du filtre. Cette fois, j'utiliserai DateFilter, mais il existe de nombreux autres filtres tels que des filtres de chaînes de caractères et des filtres numériques. Pour plus d'informations, voir Documents officiels!
deadline = filters.DateFilter(field_name='deadline', lookup_expr='gte')
** Supplément **
Le champ field_name = ''
ci-dessus spécifie le nom du champ de modèle que vous souhaitez filtrer. Si vous ne spécifiez pas de nom ici, le nom de la définition de filtre (la partie de «date limite» dans le code ci-dessus) sera traité comme le nom du champ de modèle à filtrer.
(Field_name
est spécifié dans l'exemple de code, mais il n'est pas réellement nécessaire s'il est identique au nom de la définition de filtre.)
Le nom du paramètre lors d'une demande sera le nom de la définition de filtre. En d'autres termes, ** si vous souhaitez que le nom du paramètre soit différent du nom du champ du modèle lors de la demande, vous devez définir field_name **.
Définissez le nom du modèle des données filtrées dans model = ~
ci-dessous.
Fields = [~]
liste les noms des définitions de filtre.
class Meta:
model = Coupon
fields = ['deadline']
Appelez simplement la classe de filtre implémentée ci-dessus comme filter_class.
filter_class = CustomFilter
Estimé 5 minutes → 5 minutes
Comparez la différence entre les données qui peuvent être obtenues quand et quand «date limite», qui indique la date d'expiration du coupon, n'est pas spécifiée comme paramètre de demande.
** Si la date limite du paramètre n'est pas spécifiée **
demande
curl -X GET http://127.0.0.1:8000/api/coupons/
réponse
[{"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 du corps entier (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 ":" 01/12/2019 "," status ": true}, {" id ": 7," code ":" 0007 "," beneficier ":" 19% de réduction sur votre facture "," explication ": "Limité du 29 décembre au 31 décembre. Ne peut être utilisé avec d'autres coupons "," store ":" Kanda store "," start ":" 2019-12-29 "," date limite ":" 2019-12-31 "," status ": true}]
** Lors de la spécification de la date limite **
Demande (demande uniquement pour les coupons expirant le 5 décembre ou après)
curl -X GET http://127.0.0.1:8000/api/coupons/?deadline=2019-12-05
réponse
[{"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 ": 5," code ":" 0005 "," bénéficier ":" [jours de pluie uniquement] 15% de réduction à la caisse "," explication ":" Uniquement disponible lorsque les coupons sont livrés. Ne peut être combiné avec d'autres coupons "," magasin ":" Tous les magasins "," start ":" 2019-10-01 " , "date limite": "2019-12-31", "status": false}, {"id": 7, "code": "0007", "bénéficier": "19% de réduction sur votre facture", "explication" ":" Limité au 29-31 décembre. Ne peut être utilisé avec d'autres coupons "," store ":" Kanda store "," start ":" 2019-12-29 "," date limite ":" 2019 -12-31 "," statut ": vrai}]
Seuls les coupons avec une date d'expiration du 5 décembre ou plus tard peuvent être obtenus.