>  기사  >  백엔드 개발  >  Python 서버 프로그래밍: django-filter를 사용한 데이터 필터링

Python 서버 프로그래밍: django-filter를 사용한 데이터 필터링

WBOY
WBOY원래의
2023-06-18 12:52:403768검색

Python은 최근 몇 년 동안 점점 더 널리 사용되는 고급 프로그래밍 언어입니다. 특히 서버측 프로그래밍에서는 개발자들이 Python의 우아함과 효율성을 선호합니다.

이 기사에서는 데이터 필터링의 관점에서 Python 서버 측 프로그래밍-django-filter의 중요한 도구를 소개합니다. Python 서버측 프로그래밍에서 django-filter를 더 잘 사용할 수 있도록 django-filter의 기본 사용법, 고급 사용법, 확장 사용법 등을 소개합니다.

1. django-filter란 무엇입니까

django-filter는 개발자가 데이터를 쉽게 필터링하고 정렬할 수 있는 간단하고 유연한 필터 시스템을 제공합니다. Django 프레임워크에서는 개발자에게 꼭 필요한 도구인 django-filter를 사용하여 데이터 필터링 기능을 쉽게 구현할 수 있습니다.

2. django-filter의 기본 사용법

django-filter를 사용하기 전에 django-filter 라이브러리를 설치해야 합니다.

pip install django-filter

django-filter를 사용하는 기본 단계는 다음과 같습니다.

1. FilterSet 클래스 만들기

먼저 필터를 정의하기 위한 FilterSet 클래스를 만들어야 합니다. FilterSet 클래스는 데이터 모델에 해당하며 필터링에 사용할 수 있는 필드, 필드 필터링 방법 등을 정의할 수 있습니다.

예를 들어 간단한 학생 모델이 있습니다:

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

그런 다음 FilterSet 클래스를 만들고 이름, 연령 및 학년 세 개의 필드를 정의할 수 있습니다. 이 필드는 모두 필터로 사용할 수 있습니다.

import django_filters

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

2.

에서 FilterSet 클래스 사용 다음으로 보기 함수에서 FilterSet 클래스를 사용합니다. FilterSet 개체를 생성하고 이를 QuerySet 개체에 전달한 다음 이를 사용하여 필터링된 데이터를 얻을 수 있습니다.

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

이 함수에서는 django-filter에서 제공하는 뷰 클래스인 FilterView 뷰 클래스를 사용합니다. FilterView는 GET 요청과 사용자 상호 작용을 처리하고 처리된 데이터를 반환하는 데 도움이 됩니다.

사용자가 전달한 필터 매개변수와 모든 학생 데이터의 QuerySet 객체를 얻기 위해 request.GET 및 Student.objects.all()을 FilterSet 객체에 전달합니다.

3. 템플릿에서 FilterSet 클래스를 사용하세요

마지막으로 필터를 템플릿에 바인딩해야 합니다. 템플릿에서는 필터에 HTML 양식을 제공하고 이를 보기 기능으로 다시 보내 사용자로부터 사용자 입력을 받을 수 있습니다.

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

템플릿에서는 {{ filter.form.as_p }}를 통해 템플릿에 필터 양식을 표시합니다. 사용자가 양식을 제출하면 계속해서 FilterSet 개체를 사용하여 사용자 입력을 기반으로 필터링된 데이터를 얻고 이를 템플릿에 반환합니다.

3. django-filter의 고급 사용법

django-filter는 개발자가 데이터를 더 잘 필터링하는 데 도움이 되는 다양한 고급 기능을 제공합니다. 이 섹션에서는 사용자 정의 필터, 여러 필터 조건 사용 및 FilterSet에서 ModelChoiceFilter 사용이라는 세 가지 고급 사용법을 소개합니다.

1. 필터 사용자 정의

먼저 필터 사용자 정의 방법을 소개하겠습니다. 때때로 우리에게 제공되는 내장 필터가 우리의 요구 사항을 충족하지 못하는 경우가 있습니다. 따라서 아이디어를 더 잘 구현하려면 필터를 사용자 정의해야 합니다.

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

이 예에서는 두 개의 사용자 정의 필터 grade__gte 및 age__gte를 정의했습니다. grade__gte는 선택 필터이고 age__gte는 숫자 필터입니다. 또한 사용자 정의 필터의 논리를 구현하기 위해 filter_grade__gte 메소드를 정의합니다. 이 예에서는 간단한 if/else를 사용하여 데이터를 필터링합니다. 필요에 따라 필터 메서드에서 사용자 지정 필터 논리를 구현할 수 있습니다.

2. 다중 필터 조건

때로는 데이터를 필터링하기 위해 동일한 필터에서 여러 필터 조건을 사용해야 할 때가 있습니다. 다행스럽게도 django-filter를 사용하면 이러한 요구 사항을 충족하기 위해 여러 필터 조건을 사용할 수 있습니다.

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

이 예에서는 grade와 age라는 두 가지 필터 조건을 정의합니다. Grade는 찾기 위해 startwith를 사용하고, age는 찾기 위해 lte를 사용합니다. 필요에 따라 다양한 검색 방법을 정의하고 FilterSet에서 사용할 수 있습니다.

3. ModelChoiceFilter

경우에 따라 ModelChoiceFilter 필터를 사용하여 모델 인스턴스를 선택해야 합니다. ModelChoiceFilter를 사용하면 모델의 외래 키 조회 등을 사용하여 데이터를 처리할 수 있습니다.

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

이 예에서는 ModelChoiceFilter를 사용하여 특정 등급 이름으로 등급 인스턴스를 필터링합니다. queryset 속성을 사용하여 찾을 개체를 설정한 다음 FilterSet 클래스에서 ModelChoiceFilter 필터를 사용할 수 있습니다.

요약

이 글에서는 Python 서버 프로그래밍-django-filter의 중요한 도구를 소개합니다. django-filter의 기본 사용법, 고급 사용법, 확장 사용법 등을 자세히 소개했습니다. 이 내용이 Python 서버측 프로그래밍에서 데이터 필터링 기능을 구현하는 데 도움이 되기를 바랍니다.

위 내용은 Python 서버 프로그래밍: django-filter를 사용한 데이터 필터링의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.