django rest framework使用django-filter實現過濾和搜索

首先創建一個models.py

from django.db import models

LANGUAGE_CHOICES = (
    ('0' , 'python'),
    ('1' , 'java')
)
STYLE_CHOICES =(
    ('0' , 'friendly'),
    ('1' , 'lovely')
)

class Snippet(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=100, blank=True, default='')
    code = models.TextField()
    linenos = models.BooleanField(default=False)
    language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100)
    style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)

    class Meta:
        ordering = ('created',)

再創建filters.py

import django_filters
from rest.models import Snippet


class SnippetFilter(django_filters.FilterSet):
    class Meta():
        model = Snippet
        fields = ['id', 'language']

在view.py中添加過濾

class SnippetView(viewsets.ModelViewSet):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializers
    filter_class = SnippetFilter
    search_fields = ('title', '=style',) #在這裏添加可以搜索的字段

url.py中配置路由:

urlpatterns = [
url(r'^api/', SnippetView.as_view({'get': 'list', 'post': 'create'}))
]

注:
需要先pip install django_filter 和 pip install django_filters
然後在settings.py中配置:

INSTALLED_APPS = [
	...
    'django_filters',
]

REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ( 
'django_filters.rest_framework.DjangoFilterBackend',  # 過濾功能
'rest_framework.filters.SearchFilter',   # 搜索功能
'rest_framework.filters.OrderingFilter',  # 排序功能
),
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', # 分頁功能
'PAGE_SIZE': 100  # 一頁可現實數據條數
}

最後可以通過路由:

127.0.0.1:8080/rest/api/?id=1  #過濾得到id=1的數據
127.0.0.1:8080/rest/api/?search=friendly   # 搜索得到包含friendly的數據
127.0.0.1:8080/rest/api/?limit=1&offset=2   # 獲取的數據每頁顯示一條,跳轉到第三頁的數據

返回得到id爲1的數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章