Pengaturcaraan pelayan Python: penapisan data menggunakan penapis django

WBOY
Lepaskan: 2023-06-18 12:52:40
asal
3730 orang telah melayarinya

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
Salin selepas log masuk

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)
Salin selepas log masuk

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']
Salin selepas log masuk

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})
Salin selepas log masuk

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 %}
Salin selepas log masuk

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
Salin selepas log masuk

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']
Salin selepas log masuk

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']
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!