过滤的时候需要下载:
pip install django-filter

序列化:
ModelSerializer:

from rest_framework import serializers
from demoapp import models as dm1model
class UserSer(serializers.ModelSerializer):
class Meta:
# 指定模型类
model = dm1model.User
# 指定序列化字段
fields = "all" #所有字段
fields = ("username","home") #其中某⼏个字段
# 序列化深度,是否序列化外键
depth = 1
# 只序列化字段
read_only_fields = ('id', 'bread', 'bcomment')
# 额外参数,修改字段设置
extra_kwargs = {
'age': {'min_value': 0, 'required': True},
'hight': {'min_value': 0, 'required': True},
}

路由:
urls.py:

from django.urls import path, include, re_path
from app03.views import *
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register('user', UserModelView)
urlpatterns = [
path("", include(router.urls)),
# path('adduser/', UserModelView.as_view()),
]

过滤+排序

settings.py:

INSTALLED_APPS = [
...
'django_filters', # 需要注册应⽤,
]
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS':
(
'django_filters.rest_framework.DjangoFilterBackend', # 过滤
'rest_framework.filters.OrderingFilter', # 排序
)
}

views.py:

from rest_framework.viewsets import ModelViewSet
from userapp import models as userapp
from app03 import serializers as app03
from django_filters.rest_framework import DjangoFilterBackend # Django自带的过滤
from rest_framework.filters import OrderingFilter # Django自带的排序

class UserModelView(ModelViewSet):
queryset = userapp.User.objects.all()
serializer_class = app03.UserSer
# filter_backends = [OrderingFilter,DjangoFilterBackend]
ordering_fields = ("age", "hight")
filter_fields = ("username", "age", "home")

路由格式:http://127.0.0.1:8000/app03/user/?ordering=hight&home=羊村

过滤:

settings.py:

REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS':
(
'django_filters.rest_framework.DjangoFilterBackend', # 过滤
)
}

views.py:
from rest_framework.viewsets import ModelViewSet
from userapp import models as userapp
from app03 import serializers as app03
from django_filters.rest_framework import DjangoFilterBackend # Django自带的过滤

使⽤全局过滤器

class UserModelView(ModelViewSet):
queryset = userapp.User.objects.all()
serializer_class = app03.UserSer
filter_fields = ("username", "age", "home")

局部使⽤过滤器

class UserModelView(ModelViewSet):
queryset = userapp.User.objects.all()
serializer_class = app03.UserSer
filter_backends = [DjangoFilterBackend] # 申明配置过滤器
filter_fields = ("username", "age", "home")

路由格式:http://127.0.0.1:8000/app03/user/?age=3&home=1

排序

settings.py:

REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS':
(
'rest_framework.filters.OrderingFilter', # 排序
)
}

views.py:

from rest_framework.viewsets import ModelViewSet
from userapp import models as userapp
from app03 import serializers as app03
from rest_framework.filters import OrderingFilter # Django自带的排序

全局

class UserModelView(ModelViewSet):
queryset = userapp.User.objects.all()
serializer_class = app03.UserSer
ordering_fields = ("age", "hight")
# 局部
class UserModelView(ModelViewSet):
queryset = userapp.User.objects.all()
serializer_class = app03.UserSer
filter_backends = [OrderingFilter]

路由格式:http://127.0.0.1:8000/app03/user/?ordering=hight

分页:

settings.py:

REST_FRAMEWORK = {
# 分页配置
'DEFAULT_PAGINATION_CLASS':
'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 3 # 每页的数据量
}

views.py:

from rest_framework.viewsets import ModelViewSet
from rest_framework.pagination import PageNumberPagination # Django自带的分页
class MyPage(PageNumberPagination):
page_size_query_param = "max_page"
page_query_param = "page"

class UserModelView(ModelViewSet):
queryset = userapp.User.objects.all()
serializer_class = app03.UserSer
pagination_class = MyPage

路由格式:http://127.0.0.1:8000/app03/user/?max_page=3&page=1

posted on 2020-11-23 16:48  跟小李说晚安  阅读(113)  评论(0)    收藏  举报