Dieser Artikel führt Sie durch die Schritte eines Anfängers, der einen Gutscheinverteilungsdienst für das iPhone mit einer RESTful-API und schnell entwickelt. Da es implementiert wurde, während die technischen Elemente einzeln untersucht wurden, ist es eine sehr Umwegimplementierung.
Entspricht den Parametern des Felds, das mithilfe der generischen Filterung im vorherigen Festlegen, dass der Filter nur auf bestimmte Daten in Django Rest Framework reagiert angegeben wurde. Ich konnte die Daten filtern. Mit dieser Methode ist es jedoch nicht möglich, die angegebenen Parameter unter den Bedingungen "größer oder gleich" und "kleiner als oder gleich" zu filtern.
Daher werden wir dieses Mal eine Filterfunktion implementieren, die das Ablaufdatum basierend auf Bedingungen wie "vor" und "nach" für das Datum bestimmt.
Wenn Django-Filter
nicht installiert ist, installieren Sie es bitte unter Bezugnahme auf den vorherigen Artikel.
Mac OS 10.15 VSCode 1.39.2 pipenv 2018.11.26 Python 3.7.4 Django 2.2.6
Erstellen Sie einen ursprünglichen Filtersatz, indem Sie die FilterSet-Klasse von django_filter erben. Fügen Sie zunächst einen Prozess zum Importieren der FilterSet-Klasse hinzu.
from django_filters import rest_framework as filters
Implementieren Sie dann den ursprünglichen Filtersatz vor der ViewSet-Klasse.
class CustomFilter(filters.FilterSet):
#Filterdefinition
deadline = filters.DateFilter(field_name='deadline', lookup_expr='gte')
class Meta:
model = Coupon
fields = ['deadline'] #Definieren Sie definierte Filter
Der folgende Teil ist die Filtereinstellung. Dieses Mal werde ich DateFilter verwenden, aber es gibt viele andere Filter wie Zeichenfolgenfilter und numerische Filter. Weitere Informationen finden Sie unter Offizielle Dokumente!
deadline = filters.DateFilter(field_name='deadline', lookup_expr='gte')
** Ergänzung ** Der obige "Feldname =" gibt den Namen des Modellfelds an, das Sie filtern möchten. Wenn Sie hier keinen Namen angeben, wird der Name der Filterdefinition (der Teil von "Frist" im obigen Code) als Name des zu filternden Modellfelds behandelt.
(Feldname
wird im Beispielcode angegeben, ist jedoch nicht erforderlich, wenn er mit dem Namen der Filterdefinition identisch ist.)
Der Parametername beim Anfordern ist der Name der Filterdefinition. Mit anderen Worten, ** wenn Sie möchten, dass sich der Parametername beim Anfordern vom Modellfeldnamen unterscheidet, müssen Sie Feldname ** festlegen.
Stellen Sie den Modellnamen der gefilterten Daten in model = ~
unten ein.
Fields = [~]
listet die Namen der Filterdefinitionen auf.
class Meta:
model = Coupon
fields = ['deadline']
Rufen Sie einfach die oben implementierte Filterklasse als filter_class auf.
filter_class = CustomFilter
Geschätzte 5 Minuten → 5 Minuten
Vergleichen Sie den Unterschied in den Daten, die abgerufen werden können, wenn und wann "Frist", die das Ablaufdatum des Gutscheins angibt, nicht als Anforderungsparameter angegeben ist.
** Wenn die Parameterfrist nicht angegeben ist **
Anfrage
curl -X GET http://127.0.0.1:8000/api/coupons/
Antwort
[{"id": 1, "code": "0001", "vorteil": "1.000 Yen Rabatt von der Zahlung", "Erklärung": "Beschränkt auf Kunden, die 5.000 Yen oder mehr verwenden. Kann nicht mit anderen Gutscheinen verwendet werden. "," store ":" Alle Geschäfte "," start ":" 2019-10-01 "," Deadline ":" 2019-12-31 "," status ": true}, {" id ": 2," code ":" 0002 "," Vorteil ":" 10% Rabatt auf Ihre Rechnung! "," Erklärung ":" Kann nicht mit anderen Gutscheinen kombiniert werden "," Geschäft ":" Yurakucho Geschäft "," Start ":" 2019-10 -01 "," Deadline ":" 2019-12-31 "," Status ": true}, {" id ": 3," Code ":" 0003 "," Benefit ":" [nur Halloween] Verkleidung 30% Rabatt, wenn Sie in den Laden kommen "," Erklärung ":" Nur für Kunden, die als 50% oder mehr des gesamten Körpers verkleidet sind (Beurteilung ist das Gefühl des Personals). Kann nicht mit anderen Gutscheinen verwendet werden "," Laden ":" Kanda Store "," Start ":" 2019-10-31 "," Deadline ":" 2019-10-31 "," Status ": true}, {" ID ": 4," Code ":" 0004 ", "Vorteil": "[nur September] Mondbeobachtungsknödelservice", "Erklärung": "Kunden, die einen Mondbeobachtungsknödel wünschen! Kann in Kombination mit anderen Gutscheinen verwendet werden!", "Geschäft": "Alle Geschäfte" , "Start": "2019-09-01", "Frist": "2019-09-30", "Status": true}, {"id": 5, "Code": "0005", "Vorteil" : "[Nur Regentage] 15% Rabatt auf die Zahlung", "Erklärung": "Nur verfügbar, wenn Gutscheine geliefert werden. Kann nicht mit anderen Gutscheinen kombiniert werden", "Geschäft": "Alle Geschäfte", "Start" ":" 2019-10-01 "," Frist ":" 2019-12-31 "," Status ": false}, {" id ": 6," Code ":" 0006 "," Benefit ":" [ Nur Sonntag] Cheers Tequila Service "," Erklärung ":" Wir werden Tequila für die Anzahl der Personen servieren. Kann mit anderen Gutscheinen verwendet werden. "," Store ":" Kanda Store "," Start ":" 2019-11-03 " "d eadline ":" 2019-12-01 "," status ": true}, {" id ": 7," code ":" 0007 "," Benefit ":" 19% Rabatt von Ihrer Rechnung "," Erklärung ": "Vom 29. bis 31. Dezember begrenzt. Kann nicht mit anderen Gutscheinen verwendet werden "," store ":" Kanda store "," start ":" 2019-12-29 "," Deadline ":" 2019-12-31 "," status ": true}]
** Bei Angabe der Frist **
Anfrage (Anfrage nur für Gutscheine, die am oder nach dem 5. Dezember ablaufen)
curl -X GET http://127.0.0.1:8000/api/coupons/?deadline=2019-12-05
Antwort
[{"id": 1, "code": "0001", "vorteil": "1.000 Yen Rabatt von der Zahlung", "Erklärung": "Beschränkt auf Kunden, die 5.000 Yen oder mehr verwenden. Kann nicht mit anderen Gutscheinen verwendet werden. "," store ":" Alle Geschäfte "," start ":" 2019-10-01 "," Deadline ":" 2019-12-31 "," status ": true}, {" id ": 2," code ":" 0002 "," Vorteil ":" 10% Rabatt auf Ihre Rechnung! "," Erklärung ":" Kann nicht mit anderen Gutscheinen kombiniert werden "," Geschäft ":" Yurakucho Geschäft "," Start ":" 2019-10 -01 "," Deadline ":" 2019-12-31 "," Status ": true}, {" id ": 5," Code ":" 0005 "," Benefit ":" [Nur Regentage] 15% Rabatt von der Kasse "," Erklärung ":" Nur verfügbar, wenn Gutscheine geliefert werden. Kann nicht mit anderen Gutscheinen kombiniert werden "," Geschäft ":" Alle Geschäfte "," Start ":" 2019-10-01 " , "Frist": "31.12.2019", "Status": false}, {"id": 7, "Code": "0007", "Vorteil": "19% Rabatt von Ihrer Rechnung", "Erklärung" ":" Begrenzt vom 29. bis 31. Dezember. Kann nicht mit anderen Gutscheinen verwendet werden "," Geschäft ":" Kanda-Geschäft "," Start ":" 2019-12-29 "," Frist ":" 2019 -12-31 "," status ": true}]
Ich konnte nur die Gutscheine erhalten, deren Ablaufdatum nach dem 5. Dezember liegt.
Weiter Authentifizierungsfunktion implementieren
Recommended Posts