[DRF]入门-7 : drf自定义过滤字段,自定义排序字段,及自定义分页功能

环境搭建

# 初始搭建开发环境
mkdir -p drf_learn7 && cd drf_learn7
virtualenv venv
source venv/bin/activate
pip install --upgrade pip
pip install django
pip install djangorestframework
pip install drf-yasg
pip install django-filter
pip freeze > requirements.txt
django-admin startproject myproject .
python manage.py startapp myapp
echo "success"

# 创建数据库并测试
python manage.py makemigrations
python manage.py makemigrations myapp
python manage.py migrate
python manage.py runserver

# 创建用户的代码
python manage.py createsuperuser --username=joe --email=[email protected]
## 密码123456

# 官网网址
## 字段
https://www.django-rest-framework.org/api-guide/filtering/#djangofilterbackend
## 分页
https://www.django-rest-framework.org/api-guide/pagination/#modifying-the-pagination-style

代码

settings.py

在这里插入图片描述

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "rest_framework",
    'django_filters',
    "myapp",
]

models.py

from django.db import models

# Create your models here.

class book(models.Model):
    bookname = models.TextField(verbose_name="书名")
    price = models.FloatField(verbose_name="价格")
    author = models.TextField(verbose_name="作者")

serializers.py

from rest_framework import serializers
from myapp.models import book


class bookSerializers(serializers.ModelSerializer):
    class Meta:
        model = book
        fields = "__all__"

views.py

from django.shortcuts import render
from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework import filters
from myapp.models import book
from myapp.serializers import bookSerializers
from rest_framework.pagination import PageNumberPagination
from django_filters.rest_framework import DjangoFilterBackend

# Create your views here.


class LargeResultsSetPagination(PageNumberPagination):
    page_size = 3
    page_size_query_param = "page_size"
    max_page_size = 10000


class bookViewSets(viewsets.ModelViewSet):
    queryset = book.objects.all()
    serializer_class = bookSerializers
    pagination_class = LargeResultsSetPagination
    filter_backends = [DjangoFilterBackend, filters.OrderingFilter]
    filterset_fields = "__all__"
    ordering_fields = "__all__"

urls.py

from django.contrib import admin
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from myapp.views import bookViewSets

router = DefaultRouter()
router.register(r"books", bookViewSets, basename="books")

urlpatterns = [
    path("admin/", admin.site.urls),
    path("", include(router.urls)),
]

测试

post几个数据

在这里插入图片描述

得到全部数据

在这里插入图片描述

得到全部数据修改排序

在这里插入图片描述

根据过滤得到数据

在这里插入图片描述

根据过滤得到数据并修改排序

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/JianShengShuaiest/article/details/127827203