REST框架的 Request 类扩展了标准 HttpRequest,允许你以与通常处理表单数据相同的方式处理具有JSON数据或其他媒体类型的请求。
request.data 返回请求主体的以解析的内容。这类似于标准request.POST和request.FILES属性,除了:
建议使用request.query_params而不是Django的标准request.GET。这样做有助于保持代码库更加正确和明显 - 任何HTTP方法类型都可能包含查询参数,而不仅仅是GET请求。
数据类型可以是 str,list,dict等
class Response(SimpleTemplateResponse):
"""
An HttpResponse that allows its data to be rendered into
arbitrary media types.
"""
def __init__(self, data=None, status=None,
template_name=None, headers=None,
exception=False, content_type=None):
参数:
最好还是看官方文档:https://www.django-rest-framework.org/api-guide/views/
APIView 类它是 Django View 类的子类。与使用常规View类几乎相同,像往常一样,传入的请求被分派到适当的处理程序方法,如.get()
或.post()
。
与Django View的不同地方:
写一个get和post请求实例:
from rest_framework.views import APIView
class ListBooks(APIView):
def get(self, request):
# booknames = [book.name for book in Book.objects.all()]
print('----------------->')
obj = Book.objects.all()
ser = BookSerializer(obj,many=True)
return Response(ser.data)
def post(self,request):
print('-------post------>',request.data,type(request.data))
ser = BookSerializer(data=request.data)
ser.is_valid()
ser.save()
return Response(ser.validated_data)
这个类是对APIView 的再次封装,实现更强和更简洁的功能。
提供的每个具体通用视图是通过GenericAPIView与一个或多个mixin类组合而构建的。
GenericAPIView的属性:
提供一种.list(request, *args, **kwargs)
实现列出查询集的方法。
如果填充了查询集,则返回200 OK响应。可以对响应数据进行分页。
提供.create(request, *args, **kwargs)
实现创建和保存新模型实例的方法。
如果创建了一个对象成功,则返回一个201 响应,如果为创建对象而提供的请求数据无效, 返回400响应。
提供一种.retrieve(request, *args, **kwargs)
方法,该方法实现在响应中返回现有模型实例。
如果可以检索对象,则返回200 OK响应,并将对象的序列化表示作为响应的主体。否则它会返回一个404 Not Found。
提供一种.update(request, *args, **kwargs)
方法,用于实现更新和保存现有模型实例。
同时也提供partial_update(request, *args, **kwargs)方法,可以实现局部更新。
成功返回200,序列化器校验数据失败时,返回400错误。
提供.destroy(request, *args, **kwargs)
实现删除现有模型实例的方法。
如果删除了一个对象,则返回一个204 响应,否则返回一个404 。
from goods.serializers import *
from goods.models import *
from rest_framework.mixins import ListModelMixin
from rest_framework.generics import GenericAPIView
class GenericsView(GenericAPIView, ListModelMixin):
queryset = GoodsInfo.objects.all()
serializer_class = GoodsInfoNewSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
使用已有的子类代表GenericAPIView和mixins的混合使用
提供post方法处理程序
继承自: GenericAPIView、CreateModelMixin
提供get方法处理程序
继承自:GenericAPIView、ListModelMixin
提供get方法处理程序
继承自: GenericAPIView、RetrieveModelMixin
提供delete方法处理程序
继承自:GenericAPIView、DestoryModelMixin
提供put和patch方法处理程序
继承自:GenericAPIView、UpdateModelMixin
提供get和post方法处理程序
继承自:GenericAPIView,ListModelMixin,CreateModelMixin
提供get,put并且patch方法处理
继承自: GenericAPIView、RetrieveModelMixin、UpdateModelMixin
提供 get、put、patch、delete方法
继承自:GenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestoryModelMixin
使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中
views.py内容:
class MyViewSet(GenericViewSet, ListModelMixin):
queryset = GoodsInfo.objects.filter(id__gt=15)
serializer_class = GoodsInfoNewSerializer
class GoodsInfoView(ModelViewSet):
queryset = GoodsInfo.objects.all()
serializer_class = GoodsInfoNewSerializer
class UserViewSet(ViewSet):
def list(self, request):
queryset = User.objects.all()
serializer = UserSerializer(queryset, many=True)
return Response(serializer.data)
def retrieve(self, request, pk=None):
queryset = User.objects.all()
user = get_object_or_404(queryset, pk=pk)
serializer = UserSerializer(user)
return Response(serializer.data)
urls.py内容:
from django.conf.urls import url, include
from goods.views import *
from rest_framework.routers import DefaultRouter
# 定义视图处理的路由器
router = DefaultRouter()
# 在路由器中注册视图集
router.register('showgoods', GoodsInfoView, base_name='hello')
router.register('viewset', MyViewSet, base_name='viewset')
urlpatterns = [
url(r'', include(router.urls)),
url(r'^goodslist/$', ListGoodsView.as_view()),
url(r'^show/$', GenericsView.as_view()),
url(r'^(?P\d+)+(/showgoods/)$' , GoodsInfoView.as_view({'get':'retrieve','post':'create','put':'update'})),
]
1.ViewSet
继承自APIView,作用也与APIView基本类似,提供了身份认证、权限校验、流量管理等。
2.GenericViewSet
继承自GenericAPIView,作用也与GenericAPIVIew类似,提供了get_object、get_queryset等方法便于列表视图与详情信息视图的开发。
3.ModelViewSet
继承自GenericAPIVIew,同时包括了ListModelMixin、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestoryModelMixin。
4.ReadOnlyModelViewSet
继承自GenericAPIVIew,同时包括了ListModelMixin、RetrieveModelMixin。