So fragen Sie Daten innerhalb eines bestimmten Zeitraums mit dem Vue-Frontend und dem Django-Backend ab

So fragen Sie Daten innerhalb eines bestimmten Zeitraums mit dem Vue-Frontend und dem Django-Backend ab

Vorwort

Während des Entwicklungsprozesses werden Sie häufig auf Funktionen wie das Filtern von Abfragen stoßen, beispielsweise das Abfragen von Daten innerhalb eines bestimmten Zeitraums statt aller Daten.

Auf diese Weise müssen wir die Zeitraumparameter an das Backend senden und dann die Abfrage auf dem Backend verarbeiten.

Hier verwenden wir ein einfaches Beispiel des Django-Backends und des Vue-Frontends, um die allgemeine Implementierung aufzuzeichnen.

Backend-Datenbank

Hier sind einige einfache Daten. Wichtig ist das Datum. Wir müssen sie filtern und basierend auf dem Datum an das Frontend zurückgeben.

Modelle.py

Klasse CountDownSign(Modelle.Modell):
 Name = Modelle.CharField(max_length=1000) 
 Datum = Modelle.Datumsfeld() 
 Zeichen = Modelle.CharField(max_length=200) 

serializers.py

Hier wird das drf-Framework vorgestellt, aber die Idee des Filterns von Abfragen hat nichts mit diesem Framework zu tun.

Klasse CountDownModelSerializer(Serializer.ModelSerializer):
 Klasse Meta:
 Modell = CountDownSign
 Felder = '__alle__'

 def erstellen(selbst, validierte Daten):
 returniere CountDownSign.objects.create(**validierte_Daten)

 def update(selbst, Instanz, validierte Daten):
 Instanzname = validierte_Daten.get('Name', Instanzname)
 Instanz.Datum = validierte_Daten.get('Datum', Instanz.Datum)
 Instanz.Sign = validierte_Daten.get('Sign', Instanz.Sign)
 Instanz.Speichern()
 Rückgabeinstanz

Ansichten.py

Bietet eine Schnittstelle zum Filtern von Abfragen. Lassen Sie sich die Start- und Enddaten vom Front-End übermitteln. Der Kerncode lautet wie folgt

obj = Modelle.CountDownSign.objects.filter(date__range=(Start, Ende))
Klasse CountDownViewSet(ModelViewSet):
 parser_classes = [JSONParser, FormParser]
 """Ansichtssatz"""
 Abfragesatz = Modelle.CountDownSign.Objekte.alle()
 serializer_class = CountDownModelSerializer
 # Suche Suchfelder = ('id', 'name', 'zeichen', 'datum')
 
 @action(Methoden=['posten'], Detail=Falsch)
 def getSE(selbst, Anfrage, *Argumente, **Kwargs):
 start = Anfrage.Daten.get('start', Keine)
 Ende = Anfrage.Daten.get('Ende', Keine)
 wenn Start und Ende:
  obj = Modelle.CountDownSign.objects.filter(date__range=(Start, Ende))

  wenn Objekt:
  ser = CountDownModelSerializer(Instanz=Objekt, viele=True)
  drucken(ser.data)
  JsonResponse zurückgeben({
   'Code': '200',
   'msg': 'Daten erfolgreich abgerufen',
   "Daten": ser.data
  })
  anders:
  JsonResponse zurückgeben({
   'Code': '1002',
   'msg': 'Get ist fehlgeschlagen',
  })
 anders:
  Antwort zurückgeben (Status = Status.HTTP_204_NO_CONTENT)

Frontend-Schnittstelle

Hier sind zwei Datumswähler zum Empfangen der Start- und Endzeit sowie verbindliche Ereignisse für die Suche.

 <div Klasse="Datumsauswahl">
 <div Klasse="Block" Stil="Float: links">
 <el-Datumsauswahl
  v-Modell="Wert1"
  Typ="Datum/Uhrzeit"
  Werteformat="jjjj-MM-tt"
  Platzhalter="Bitte wählen Sie ein Startdatum">
 </el-Datumsauswahl>
 </div>
 <div Klasse = "Block" Stil = "Float: links; Rand links: 20px;">
 <el-Datumsauswahl
  v-Modell="Wert2"
  Typ="Datum/Uhrzeit"
  Werteformat="jjjj-MM-tt"
  Platzhalter="Bitte wählen Sie eine Frist">
 </el-Datumsauswahl>
 </div>
 <el-button round style="float: left; margin-left: 20px;" @click="searchC">Suchen</el-button>
 </div>

Daten.js

Implementierte Schnittstellenfunktionen

Exportfunktion searchCountDown(start, end) {
 Rückgabeanforderung({
 URL: "countDown/getSE/",
 Methode: 'post',
 Daten: {
  Anfang: Anfang,
  Ende: Ende
 }
 })
}

Klickereignisimplementierung

Bestimmen Sie die Legitimität der Eingabe und akzeptieren Sie die Daten für die Anzeige der Datenbindung

sucheC() {
 Konsole.log(dieser.Wert1);
 Konsole.log(dieser.Wert2);
 wenn (dieser.Wert1 < dieser.Wert2) {
 searchCountDown(dieser.Wert1, dieser.Wert2).dann(res => {
  Konsole.log(Res.Daten);
  diese.searchRes = res.data;
 })
 } anders {
 this.$message.error("Zeitbereichsfehler");
 }
 },

Datenanzeige

 <div Klasse="Artikel">
 <ul>
 <li v-for="(item,index) in searchRes">
  <div Klasse = "ui-Raster" Stil = "Breite: 100 %; Höhe: 60px;">
  <div Klasse="vier breite Spalten"><span>{{ item.name }}</span></div>
  <div Klasse="vier breite Spalten"><span>{{ item.date }}</span></div>
  <div Klasse="vier breite Spalten"><span>{{ item.sign }}</span></div>
  <div class="vier breite Spalten">
  <el-button type="danger" icon="el-icon-delete" kreis @click="deleteC(item.id)"></el-button>
  <el-button type="primary" icon="el-icon-edit" kreis></el-button>
  </div>
  </div>
  <div class="ui-Teiler"></div>
 </li>
 </ul>

Ergebnisse der Operation

Es ist ersichtlich, dass die zurückgegebenen Daten alle innerhalb des Zeitbereichs liegen. Hier sind die am 25. Februar um 0:00 Uhr zurückgegebenen Daten tatsächlich die Daten vom 5. Februar. Da die Daten formatiert sind, werden auch die Daten vom 25. zurückgegeben.

Zusammenfassen

Dies ist das Ende dieses Artikels darüber, wie man Daten innerhalb eines bestimmten Zeitraums mit dem Vue-Frontend und dem Django-Backend abfragt. Weitere relevante Inhalte zu Vue- und Django-Datenabfragen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Perfekte Lösung für den Konflikt zwischen Django- und Vue-Syntax
  • Beispiel für den Aufbau eines Front-End- und Back-End-Trennungsprojekts mit Django+Vue.js
  • So implementieren Sie die Dateninteraktion zwischen Django und Vue
  • Methoden und Schritte zur Dateninteraktion mit Django und Vue
  • Detaillierte Erläuterung der domänenübergreifenden Umgebungskonfiguration von Django + Vue

<<:  MySQL NULL-Datenkonvertierungsmethode (unbedingt lesen)

>>:  Beispiel für die Konfiguration mehrerer virtueller Hosts in nginx

Artikel empfehlen

Beispielcode zur Implementierung der Schnittstellensignatur mit Vue+Springboot

1. Umsetzungsideen Der Zweck der Schnittstellensi...

Implementierung des Imports und Exports von Vue-Element-Admin-Projekten

vue-element-admin importiert Komponentenkapselung...

JavaScript zum Erzielen eines Skin-Effekts (Ändern des Hintergrunds)

In diesem Artikel wird der spezifische JavaScript...

Sammlung von MySQL-Fuzzy-Abfrageanweisungen

SQL-Fuzzy-Abfrageanweisung Die allgemeine Fuzzy-A...

Detaillierte Erklärung zum Lay-Loading von JavaScript

Inhaltsverzeichnis Lazy Loading CSS-Stile: HTML-T...

Detaillierte Erklärung der wichtigsten Einzigartigkeit von v-for in Vue

Inhaltsverzeichnis 1. DOM-Diff 2. Fügen Sie Eleme...

Vue implementiert Klick-Feedback-Anweisungen für den Wasserwelleneffekt

Inhaltsverzeichnis Wasserwelleneffekt Sehen wir u...

Detaillierter Installationsprozess der MySQL 8.0 Windows-ZIP-Paketversion

Der Installationsprozess von MySQL 8.0 Windows Zi...

Tutorial zur HTML-Tabellenauszeichnung (37): Hintergrundbild-Attribut BACKGROUND

Legen Sie das Hintergrundbild für die Tabellenübe...

Sind Sie immer noch Select *?

Es gibt viele Gründe, warum eine Anwendung langsa...