ModelViewSet和ModelSerializer的使⽤

ModelSerializer

########serializers.py#########
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

#########urls.py##############
from django.urls import path,include,re_path
from demo3app.views import *
from rest_framework.routers import DefaultRouter
# 注册modelviewset视图的路由
router = DefaultRouter()
router.register("user",UserModelView)

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

Views.py

#########demp3app/views.py##############
from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from demoapp import models as dm1model
from demo3app import serializers as dm3ser
# Create your views here.
class UserModelView(ModelViewSet):
 	queryset = dm1model.User.objects.all()
 	serializer_class = dm3ser.UserSer

ModelViewSet的过滤,排序和分⻚

1、过滤

  • 下载所需三⽅包
pip install django-filter
  • 配置⽂件
########settings.py#########
INSTALLED_APPS = [
	...
	'django_filters', # 需要注册应⽤,
]
#全局配置过滤器
REST_FRAMEWORK = {
	'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend')
}
  • 使⽤
#########demp3app/views.py##############
from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from demoapp import models as dm1model
from demo3app import serializers as dm3ser
from django_filters.rest_framework import DjangoFilterBackend
# Create your views here.
#使⽤全局过滤器
class UserModelView(ModelViewSet):
 queryset = dm1model.User.objects.all()
 serializer_class = dm3ser.UserSer
 filter_fields = ("username","age","home")

#局部使⽤过滤器
class UserModelView(ModelViewSet):
 queryset = dm1model.User.objects.all()
 serializer_class = dm3ser.UserSer
 filter_backends = [DjangoFilterBackend] #申明配置过滤器
 filter_fields = ("username","age","home")
  • 请求时在get请求⾥最后加上对应的条件

http://127.0.0.1:8000/dm3/user/?home=河南&username=peter2

2、排序

  • 配置
########settings.py#########
#全局配置过滤器
REST_FRAMEWORK = {
	'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.OrderingFilter',)
}
  • 使⽤
#########demp3app/views.py##############
from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from demoapp import models as dm1model
from demo3app import serializers as dm3ser
from rest_framework.filters import OrderingFilter
from django_filters.rest_framework import DjangoFilterBackend
# Create your views here.
#全局配置使⽤
class UserModelView(ModelViewSet):
	queryset = dm1model.User.objects.all()
	serializer_class = dm3ser.UserSer
	ordering_fields = ("age","hight")
	
#局部配置使⽤
class UserModelView(ModelViewSet):
	queryset = dm1model.User.objects.all()
	serializer_class = dm3ser.UserSer
	filter_backends = [OrderingFilter] #申明配置排序过滤器
	ordering_fields = ("age","hight")
  • 请求时在get请求⾥最后加上对应的条件

http://127.0.0.1:8000/dm3/user/?ordering=hight

3、排序 + 过滤混合使用

  • 设置
########settings.py#########
REST_FRAMEWORK = {
 	#过滤器
	'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',
								'rest_framework.filters.OrderingFilter')
}
  • 使⽤
#########demp3app/views.py##############
from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from demoapp import models as dm1model
from demo3app import serializers as dm3ser
from rest_framework.filters import OrderingFilter
from django_filters.rest_framework import DjangoFilterBackend
# Create your views here.
class UserModelView(ModelViewSet):
	queryset = dm1model.User.objects.all()
	serializer_class = dm3ser.UserSer
	#filter_backends = [OrderingFilter,DjangoFilterBackend] #如过未设置全局配置,需要在这局部配置
	ordering_fields = ("age","hight")
	filter_fields = ("username","age","home")

  • 请求时在get请求⾥最后加上对应的条件

http://127.0.0.1:8000/dm3/user/?ordering=hight&home=“河南”

4、分页

  • 全局配置
########settings.py#########
REST_FRAMEWORK = {	
	'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.PageNumberPagination',
	'PAGE_SIZE': 3 # 每⻚数⽬
}
  • 局部配置和使用
#####views.py#####
from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from demoapp import models as dm1model
from demo3app import serializers as dm3ser
from rest_framework.filters import OrderingFilter
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.pagination import PageNumberPagination
# Create your views here.
class MyPage(PageNumberPagination):
    # 指定查询字符串中代表每页返回数据数量的参数名,默认None
    # page_size_query_param = "max_page"
    page_size = 3  # 每页显示记录数,前端没传入max_page,默认使用此参数

    # # 指定查询字符串中代表页码的参数名,不指定默认值page
    # page_query_param = 'page'
    # # 后端控制一页最多的结果条数,
    # max_page_size = 3
class UserModelView(ModelViewSet):
	queryset = dm1model.User.objects.all()
	serializer_class = dm3ser.UserSer
	pagination_class = MyPage
  • 请求时在get请求⾥最后加上对应的条件

0http://127.0.0.1:8000/dm3/user/?page=3

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: DRF ModelViewSetDjango REST framework 中的一个视图集,它提供了常见的 CRUD 操作,包括列表、创建、更新、删除和详情视图。同时,它还支持自定义的行为和路由。 ### 回答2: DRF(Django Rest Framework)是一个用于构建Web API的强大框架,它提供了一系列视图和工具,使得在Django项目中创建和管理API变得更加简单。其中,ModelViewSet是DRF中的一个视图集,它是APIView的子类,旨在提供对数据库模型的常见CRUD操作的快速实现。 ModelViewSet将常见的API操作(包括获取列表、创建对象、获取对象、更新对象和删除对象)映射到对应的HTTP请求方法(GET、POST、PUT、PATCH和DELETE)。为了使用ModelViewSet,我们需要为其指定一个数据模型(通过model属性),并定义一个序列化类(通过serializer_class属性),用于处理数据与API之间的相互转换。 ModelViewSet通过继承自GenericAPIViewModelMixin,已经为我们实现了大部分常用的应用逻辑,我们甚至可以自定义额外的操作(比如额外的GET请求),只需要在视图集中定义对应的方法,并将其添加到相应的路由中即可。 使用ModelViewSet的优势在于它可以大大减少我们开发API的时间和工作量,因为它为我们处理了许多重复的代码和常见的操作。只需设置一个ModelViewSet实例并将其添加到url路由中,我们就能够使用HTTP方法对数据库模型执行常见的CRUD操作。 总结来说,DRF的ModelViewSet是一个提供了常见的CRUD操作快速实现的视图集,可以极大地简化我们在Django项目中创建和管理API的过程。它通过定义数据模型和序列化类,并使用HTTP方法对数据库模型进行操作,帮助我们减少了重复的代码和常见操作的开发时间。 ### 回答3: DRF(Django REST framework)是一个用于构建基于Django的Web API的强大工具集。其中的ModelViewSet是DRF中的一个视图类,它提供了对数据库模型的快速、便捷的交互接口。下面是关于DRF ModelViewSet的一些详细解释。 ModelViewSet是基于GenericViewSet和具体的ModelMixin类组合而成的,它提供了一系列默认的CRUD操作(即创建、读取、更新、删除)及其它一些常用的操作。具体来说,可以使用ModelViewSet来快速创建一个拥有标准RESTful API接口的数据库模型视图。 通过使用ModelViewSet,我们可以在视图类中定义一些方法,例如create、retrieve、update、partial_update和destroy等。这些方法会处理相应的HTTP请求,并根据请求的类型执行对应的操作。同时,ModelViewSet还提供了默认的路由配置,帮助我们更方便地定义和管理API的URL。 ModelViewSet也提供了一些常用的功能,例如过滤、搜索、排序等。我们可以通过重写ModelViewSet的get_queryset方法来进行自定义查询,以满足特定的过滤需求。此外,我们还可以通过配置filter_fields、search_fields和ordering_fields等属性,来实现对数据进行过滤、搜索和排序。 除了默认的操作之外,ModelViewSet还允许我们自定义额外的操作。例如,我们可以定义一个名为"like"的额外操作,用于处理用户对某一条数据的点赞。通过配置ModelViewSet的action装饰器,我们可以为这个自定义操作创建对应的路由和处理方法。 总之,DRF的ModelViewSet为我们提供了一个简单、灵活、高效的方式来构建和管理数据库模型的API。它通过默认的CRUD操作、自定义操作以及一系列的过滤、搜索、排序功能,使得开发者能够更方便地处理数据模型和API接口的交互。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值