Maison  >  Article  >  développement back-end  >  Programmation serveur Python : filtrage des données à l'aide de Django-filter

Programmation serveur Python : filtrage des données à l'aide de Django-filter

WBOY
WBOYoriginal
2023-06-18 12:52:403768parcourir

Python est un langage de programmation de haut niveau qui est devenu de plus en plus utilisé ces dernières années. Surtout dans la programmation côté serveur, l'élégance et l'efficacité de Python sont privilégiées par les développeurs.

Cet article présentera un outil important dans la programmation côté serveur Python-django-filter du point de vue du filtrage des données. Nous présenterons l'utilisation de base, l'utilisation avancée, l'utilisation étendue, etc. de Django-filter pour vous aider à mieux l'utiliser dans la programmation côté serveur Python.

1. Qu'est-ce que Django-filter

django-filter est une application tierce dans le framework Django. Elle fournit un système de filtrage simple et flexible qui permet aux développeurs de filtrer et de trier facilement les données. Dans le framework Django, la fonction de filtrage des données peut être facilement implémentée à l'aide de django-filter, qui est un outil indispensable pour les développeurs.

2. Utilisation de base de Django-filter

Avant d'utiliser Django-filter, vous devez installer la bibliothèque Django-filter :

pip install django-filter

Les étapes de base pour utiliser Django-filter sont les suivantes.

1. Créez la classe FilterSet

Tout d'abord, vous devez créer une classe FilterSet pour définir le filtre. Une classe FilterSet correspond à un modèle de données et peut définir quels champs peuvent être utilisés pour le filtrage, comment filtrer les champs, etc.

Par exemple, nous avons un modèle d'étudiant simple :

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

Ensuite, nous pouvons créer une classe FilterSet et définir trois champs nom, âge et note, qui peuvent tous être utilisés comme filtres :

import django_filters

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

2. Utilisation de la classe FilterSet dans

Ensuite, utilisez la classe FilterSet dans la fonction d'affichage. Vous pouvez créer un objet FilterSet, le transmettre à un objet QuerySet, puis l'utiliser pour obtenir des données filtrées.

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})

Dans cette fonction, nous utilisons la classe de vue FilterView, qui est une classe de vue fournie dans Django-filter. FilterView nous aide à gérer les requêtes GET et les interactions des utilisateurs, et renvoie les données traitées.

Notez que nous transmettons request.GET et Student.objects.all() à l'objet FilterSet pour obtenir les paramètres de filtre transmis par l'utilisateur et les objets QuerySet de toutes les données des étudiants.

3. Utilisez la classe FilterSet dans le modèle

Enfin, vous devez lier le filtre au modèle. Dans le modèle, vous pouvez obtenir la contribution de l'utilisateur en fournissant un formulaire HTML au filtre et en le renvoyant à la fonction d'affichage.

<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 %}

Dans le modèle, nous affichons le formulaire de filtre dans le modèle via {{ filter.form.as_p }}. Lorsque l'utilisateur soumet le formulaire, nous continuerons à utiliser l'objet FilterSet pour obtenir des données filtrées en fonction des entrées de l'utilisateur et les renvoyer au modèle.

3. Utilisation avancée de Django-filter

django-filter fournit de nombreuses fonctions avancées pour aider les développeurs à mieux filtrer les données. Dans cette section, nous présenterons trois utilisations avancées : les filtres personnalisés, l'utilisation de plusieurs conditions de filtre et l'utilisation de ModelChoiceFilter dans un FilterSet.

1. Personnaliser les filtres

Tout d'abord, présentons comment personnaliser les filtres. Parfois, les filtres intégrés qui nous sont fournis ne répondent pas à nos besoins. Par conséquent, nous devons personnaliser le filtre pour mieux mettre en œuvre nos idées.

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

Dans cet exemple, nous avons défini deux filtres personnalisés grade__gte et age__gte. grade__gte est un filtre de sélection et age__gte est un filtre numérique. Nous définissons également une méthode filter_grade__gte pour implémenter la logique du filtre personnalisé. Dans cet exemple, nous utilisons un simple if/else pour filtrer les données. Vous pouvez implémenter une logique de filtre personnalisée dans la méthode de filtrage en fonction de vos besoins.

2. Conditions de filtre multiples

Parfois, nous devons utiliser plusieurs conditions de filtre dans le même filtre pour filtrer les données. Heureusement, Django-filter nous permet d'utiliser plusieurs conditions de filtrage pour répondre à ce besoin.

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']

Dans cet exemple, nous définissons deux conditions de filtre, grade et âge. La qualité commence par pour trouver, et l'âge utilise LTE pour trouver. Vous pouvez définir différentes méthodes de recherche en fonction de vos besoins et les utiliser dans FilterSet.

3. ModelChoiceFilter

Dans certains cas, nous devons utiliser un filtre ModelChoiceFilter pour sélectionner les instances de modèle. ModelChoiceFilter nous permet de traiter nos données en utilisant les recherches de clé étrangère du modèle, etc.

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']

Dans cet exemple, nous utilisons ModelChoiceFilter pour filtrer les instances de note avec un nom de note spécifique. Nous pouvons utiliser l'attribut queryset pour définir l'objet à rechercher, puis utiliser le filtre ModelChoiceFilter dans la classe FilterSet.

Résumé

Cet article présente un outil important dans la programmation du serveur Python-django-filter. Nous avons présenté en détail l'utilisation de base, l'utilisation avancée, l'utilisation étendue, etc. de Django-filter. J'espère que ce contenu vous sera utile pour implémenter des fonctions de filtrage de données dans la programmation côté serveur Python.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn