Rumah > Artikel > pembangunan bahagian belakang > Pengaturcaraan pelayan Python: penapisan data menggunakan penapis django
Python ialah bahasa pengaturcaraan peringkat tinggi yang semakin digunakan secara meluas sejak beberapa tahun kebelakangan ini. Terutamanya dalam pengaturcaraan sebelah pelayan, keanggunan dan kecekapan Python digemari oleh pembangun.
Artikel ini akan memperkenalkan alat penting dalam pengaturcaraan bahagian pelayan Python - penapisan django dari perspektif penapisan data. Kami akan memperkenalkan penggunaan asas, penggunaan lanjutan, penggunaan lanjutan, dsb. penapis django untuk membantu anda menggunakannya dengan lebih baik dalam pengaturcaraan bahagian pelayan Python.
1. Apakah itu django-filter
django-filter ialah aplikasi pihak ketiga dalam rangka kerja Django Ia menyediakan sistem penapis yang mudah dan fleksibel yang membolehkan pembangun menapis dan menyusun data dengan mudah dengan mudah. Dalam rangka kerja Django, fungsi penapisan data boleh dilaksanakan dengan mudah menggunakan penapis django, yang merupakan alat yang sangat diperlukan untuk pembangun.
2. Penggunaan asas django-filter
Sebelum menggunakan django-filter, anda perlu memasang perpustakaan django-filter:
pip install django-filter
Langkah asas untuk menggunakan django- penapis adalah seperti berikut.
1 Cipta kelas FilterSet
Mula-mula, anda perlu mencipta kelas FilterSet untuk mentakrifkan penapis. Kelas FilterSet sepadan dengan model data dan boleh menentukan medan yang boleh digunakan untuk penapisan, cara menapis medan, dsb.
Sebagai contoh, kami mempunyai model pelajar yang ringkas:
class Student(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() grade = models.CharField(max_length=20)
Kemudian, kami boleh mencipta kelas FilterSet dan mentakrifkan tiga nama medan, umur dan gred, yang semuanya boleh digunakan sebagai penapis:
import django_filters class StudentFilter(django_filters.FilterSet): class Meta: model = Student fields = ['name', 'age', 'grade']
2. Gunakan kelas FilterSet dalam fungsi view
Seterusnya, gunakan kelas FilterSet dalam fungsi view. Anda boleh mencipta objek FilterSet, hantar ke objek QuerySet, dan kemudian gunakannya untuk mendapatkan data yang ditapis.
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})
Dalam fungsi ini, kami menggunakan kelas paparan FilterView, iaitu kelas pandangan yang disediakan dalam penapis-django. FilterView membantu kami mengendalikan permintaan GET dan interaksi pengguna serta mengembalikan data yang diproses.
Perhatikan bahawa kami menghantar request.GET dan Student.objects.all() kepada objek FilterSet untuk mendapatkan parameter penapis yang diluluskan oleh pengguna dan objek QuerySet bagi semua data pelajar.
3 Gunakan kelas FilterSet dalam templat
Akhir sekali, anda perlu mengikat penapis pada templat. Dalam templat, anda boleh mendapatkan input pengguna daripada pengguna dengan menyediakan borang HTML kepada penapis dan menghantarnya kembali ke fungsi paparan.
<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 %}
Dalam templat, kami memaparkan borang penapis dalam templat melalui {{ filter.form.as_p }}. Apabila pengguna menyerahkan borang, kami akan terus menggunakan objek FilterSet untuk mendapatkan data yang ditapis berdasarkan input pengguna dan mengembalikannya ke templat.
3. Penggunaan lanjutan django-filter
django-filter menyediakan banyak fungsi lanjutan untuk membantu pembangun menapis data dengan lebih baik. Dalam bahagian ini, kami akan memperkenalkan tiga penggunaan lanjutan: penapis tersuai, menggunakan berbilang keadaan penapis dan menggunakan ModelChoiceFilter dalam Set Penapis.
1. Penapis tersuai
Mula-mula, mari perkenalkan cara menyesuaikan penapis. Kadangkala, penapis terbina dalam yang diberikan kepada kami tidak memenuhi keperluan kami. Oleh itu, kami perlu menyesuaikan penapis untuk melaksanakan idea kami dengan lebih baik.
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
Dalam contoh ini, kami mentakrifkan dua penapis tersuai gred__gte dan age__gte. grade__gte ialah penapis pilihan dan age__gte ialah penapis berangka. Kami juga mentakrifkan kaedah filter_grade__gte untuk melaksanakan logik penapis tersuai. Dalam contoh ini, kami menggunakan if/else yang mudah untuk menapis data. Anda boleh melaksanakan logik penapis tersuai dalam kaedah penapis mengikut keperluan anda.
2. Berbilang syarat penapis
Kadangkala, kita perlu menggunakan berbilang keadaan penapis dalam penapis yang sama untuk menapis data. Nasib baik, django-filter membolehkan kami menggunakan berbilang keadaan penapis untuk memenuhi keperluan ini.
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']
Dalam contoh ini, kami mentakrifkan dua gred keadaan penapis dan umur. Penggunaan gred bermula dengan mencari, dan umur menggunakan lte untuk mencari. Anda boleh menentukan kaedah carian yang berbeza mengikut keperluan anda dan menggunakannya dalam FilterSet.
3. ModelChoiceFilter
Dalam sesetengah kes, kita perlu menggunakan penapis ModelChoiceFilter untuk memilih contoh model. ModelChoiceFilter membolehkan kami memproses data kami menggunakan carian kunci asing model dsb.
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']
Dalam contoh ini, kami menggunakan ModelChoiceFilter untuk menapis kejadian Gred dengan nama gred tertentu. Kita boleh menggunakan atribut queryset untuk menetapkan objek untuk dicari, dan kemudian menggunakan penapis ModelChoiceFilter dalam kelas FilterSet.
Ringkasan
Artikel ini memperkenalkan alat penting dalam pelayan Python programming-django-filter. Kami memperkenalkan penggunaan asas, penggunaan lanjutan, penggunaan lanjutan, dll. penapis django secara terperinci. Saya harap kandungan ini akan membantu anda dalam melaksanakan fungsi penapisan data dalam pengaturcaraan bahagian pelayan Python.
Atas ialah kandungan terperinci Pengaturcaraan pelayan Python: penapisan data menggunakan penapis django. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!