Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Serverprogrammierung: Datenfilterung mit Django-Filter

Python-Serverprogrammierung: Datenfilterung mit Django-Filter

WBOY
WBOYOriginal
2023-06-18 12:52:403768Durchsuche

Python ist eine High-Level-Programmiersprache, die in den letzten Jahren immer häufiger eingesetzt wird. Insbesondere bei der serverseitigen Programmierung werden Pythons Eleganz und Effizienz von Entwicklern geschätzt.

In diesem Artikel wird ein wichtiges Tool für die serverseitige Python-Programmierung, Django-Filter, aus der Perspektive der Datenfilterung vorgestellt. Wir werden die grundlegende Verwendung, erweiterte Verwendung, erweiterte Verwendung usw. von Django-Filter vorstellen, um Ihnen zu helfen, es besser in der serverseitigen Python-Programmierung zu verwenden.

1. Was ist Django-Filter? Django-Filter ist eine Drittanbieteranwendung im Django-Framework. Es bietet ein einfaches und flexibles Filtersystem, mit dem Entwickler Daten einfach filtern und sortieren können. Im Django-Framework kann die Datenfilterfunktion einfach mit Django-Filter implementiert werden, einem unverzichtbaren Werkzeug für Entwickler.

2. Grundlegende Verwendung von Django-Filter

Bevor Sie Django-Filter verwenden, müssen Sie die Django-Filter-Bibliothek installieren:

pip install django-filter

Die grundlegenden Schritte zur Verwendung von Django-Filter sind wie folgt.

1. Erstellen Sie die FilterSet-Klasse

Zunächst müssen Sie eine FilterSet-Klasse erstellen, um den Filter zu definieren. Eine FilterSet-Klasse entspricht einem Datenmodell und kann definieren, welche Felder zum Filtern verwendet werden können, wie Felder gefiltert werden usw.

Zum Beispiel haben wir ein einfaches Schülermodell:

class Student(models.Model):
    name = models.CharField(max_length=30)
    age = models.IntegerField()
    grade = models.CharField(max_length=20)

Dann können wir eine FilterSet-Klasse erstellen und drei Felder namens, Alter und Note definieren, die alle als Filter verwendet werden können:

import django_filters

class StudentFilter(django_filters.FilterSet):
    class Meta:
        model = Student
        fields = ['name', 'age', 'grade']

2 Verwenden der FilterSet-Klasse in

Als nächstes verwenden Sie die FilterSet-Klasse in der Ansichtsfunktion. Sie können ein FilterSet-Objekt erstellen, es an ein QuerySet-Objekt übergeben und es dann verwenden, um gefilterte Daten abzurufen.

from django.shortcuts import render
from django_filters.views import FilterView

def student_list(request):
    f = StudentFilter(request.GET, queryset=Student.objects.all())
    return render(request, 'student_list.html', {'filter': f})

In dieser Funktion verwenden wir die FilterView-Ansichtsklasse, eine in Django-Filter bereitgestellte Ansichtsklasse. FilterView hilft uns bei der Verarbeitung von GET-Anfragen und Benutzerinteraktionen und gibt verarbeitete Daten zurück.

Beachten Sie, dass wir request.GET und Student.objects.all() an das FilterSet-Objekt übergeben, um die vom Benutzer übergebenen Filterparameter und die QuerySet-Objekte aller Schülerdaten zu erhalten.

3. Verwenden Sie die FilterSet-Klasse in der Vorlage.

Schließlich müssen Sie den Filter an die Vorlage binden. In der Vorlage können Sie Benutzereingaben vom Benutzer erhalten, indem Sie dem Filter ein HTML-Formular bereitstellen und es an die Ansichtsfunktion zurücksenden.

<form method="get">
    {{ filter.form.as_p }}
    <button type="submit">搜索</button>
</form>

{% if filter.qs %}
    <ul>
        {% for student in filter.qs %}
            <li>{{ student.name }} - {{ student.age }} - {{ student.grade }}</li>
        {% endfor %}
    </ul>
{% else %}
    <p>没有符合条件的数据!</p>
{% endif %}

In der Vorlage zeigen wir das Filterformular in der Vorlage durch {{ filter.form.as_p }} an. Wenn der Benutzer das Formular absendet, verwenden wir weiterhin das FilterSet-Objekt, um die gefilterten Daten basierend auf der Benutzereingabe abzurufen und an die Vorlage zurückzugeben.

3. Erweiterte Verwendung von Django-Filter

Django-Filter bietet viele erweiterte Funktionen, die Entwicklern helfen, Daten besser zu filtern. In diesem Abschnitt stellen wir drei erweiterte Verwendungsmöglichkeiten vor: benutzerdefinierte Filter, die Verwendung mehrerer Filterbedingungen und die Verwendung von ModelChoiceFilter in einem FilterSet.

1. Passen Sie Filter an

Lassen Sie uns zunächst vorstellen, wie Sie Filter anpassen. Manchmal erfüllen die eingebauten Filter, die uns zur Verfügung gestellt werden, nicht unsere Bedürfnisse. Daher müssen wir den Filter anpassen, um unsere Ideen besser umzusetzen.

from django.db import models
import django_filters

class StudentFilter(django_filters.FilterSet):
    GRADE_CHOICES = (
        ('1', '一年级'),
        ('2', '二年级'),
        ('3', '三年级'),
        ('4', '四年级'),
        ('5', '五年级'),
        ('6', '六年级'),
    )

    grade__gte = django_filters.ChoiceFilter(label='入学年级', choices=GRADE_CHOICES)
    age__gte = django_filters.NumberFilter(label='年龄', lookup_expr='gte')

    class Meta:
        model = Student
        fields = ['grade', 'age']

    def filter_grade__gte(self, queryset, name, value):
        if value:
            return queryset.filter(grade__gte=int(value))
        return queryset

In diesem Beispiel haben wir zwei benutzerdefinierte Filter grade__gte und age__gte definiert. grade__gte ist ein Auswahlfilter und age__gte ist ein numerischer Filter. Wir definieren außerdem eine filter_grade__gte-Methode, um die Logik des benutzerdefinierten Filters zu implementieren. In diesem Beispiel verwenden wir ein einfaches if/else, um die Daten zu filtern. Sie können je nach Bedarf eine benutzerdefinierte Filterlogik in der Filtermethode implementieren.

2. Mehrere Filterbedingungen

Manchmal müssen wir mehrere Filterbedingungen im selben Filter verwenden, um Daten zu filtern. Glücklicherweise können wir mit Django-Filter mehrere Filterbedingungen verwenden, um diesen Bedarf zu decken.

from django.db import models
import django_filters

class StudentFilter(django_filters.FilterSet):
    grade = django_filters.CharFilter(label='入学年级', lookup_expr='startswith')
    age = django_filters.NumberFilter(label='年龄', lookup_expr='lte')

    class Meta:
        model = Student
        fields = ['grade', 'age']

In diesem Beispiel definieren wir zwei Filterbedingungen: Grad und Alter. Grade verwendet „startswith“ zum Suchen und „age“ verwendet „lte“ zum Suchen. Sie können je nach Bedarf verschiedene Suchmethoden definieren und diese in FilterSet verwenden.

3. ModelChoiceFilter

In einigen Fällen müssen wir einen ModelChoiceFilter-Filter verwenden, um Modellinstanzen auszuwählen. Mit ModelChoiceFilter können wir unsere Daten mithilfe der Fremdschlüsselsuche usw. des Modells verarbeiten.

from django.db import models
import django_filters

class GradeFilter(django_filters.FilterSet):
    name = django_filters.ModelChoiceFilter(queryset=Grade.objects.all())

    class Meta:
        model = Grade
        fields = ['name']

In diesem Beispiel verwenden wir ModelChoiceFilter, um Grade-Instanzen mit einem bestimmten Grade-Namen zu filtern. Wir können das Queryset-Attribut verwenden, um das zu suchende Objekt festzulegen, und dann den ModelChoiceFilter-Filter in der FilterSet-Klasse verwenden.

Zusammenfassung

Dieser Artikel stellt ein wichtiges Tool in der Python-Serverprogrammierung vor: Django-Filter. Wir haben die grundlegende Verwendung, erweiterte Verwendung, erweiterte Verwendung usw. von Django-Filter ausführlich vorgestellt. Ich hoffe, dieser Inhalt wird Ihnen bei der Implementierung von Datenfilterfunktionen in der serverseitigen Python-Programmierung hilfreich sein.

Das obige ist der detaillierte Inhalt vonPython-Serverprogrammierung: Datenfilterung mit Django-Filter. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn