在Django REST框架中内置的请求类扩展了Django中类的请求,实现了很多方便的功能,如请求数据解析和认证等。
比如,区别于Django中的请求从request.GET中获取URL参数,从request.POST中取某些情况下的帖子数据。
在APIView中封装的请求,就实现了请求数据的解析:
对于得到请求的参数我们通过request.query_params来获取。
对于帖子请求,请求的数据我们通过request.data来获取。
<强>序列化强>
从rest_framework进口序列化器 从app01导入模型 类CommentSerializer (serializers.ModelSerializer): 类元: 模型=models.Comment 字段=" __all__ " extra_kwargs={ “内容”:{“error_message”:{“要求”:“评论内容不能为空"}}, “条”:{“error_message”:{“要求”:“文章不能为空"}} } 类SchoolSerializer (serializers.ModelSerializer): 类元: 模型=models.School 字段=" __all__ "
<>强视图强>
从rest_framework。视图导入APIView 类SchoolView (APIView): def get(自我,请求,* args, * * kwargs): query_set=models.School.objects.all () ser_obj=app01_serializers。SchoolSerializer (query_set,许多=True) 返回响应(ser_obj.data) 类SchoolDetail (APIView): def get(自我、请求、pk * args, * * kwargs): obj=models.School.objects.filter (pk=pk)当代() ser_obj=app01_serializers.SchoolSerializer (obj) 返回响应(ser_obj.data)
<>强视图
强>
从rest_framework。仿制药进口GenericAPIView #公共类 从rest_framework。mixin进口ListModelMixin RetrieveModelMixin, CreateModelMixin #混合类必须与公共类搭配着使用 类SchoolView (GenericAPIView mixins.ListModelMixin): #查看学校列表 queryset=models.School.objects.all () serializer_class=app01_serializers.SchoolSerializer def get(自我,请求,* args, * * kwargs): 回归自我。列表(请求、* args * * kwargs) 类SchoolDetail (GenericAPIView mixin。RetrieveModelMixin mixins.CreateModelMixin): #创建,与具体查出某一条记录 queryset=models.School.objects.all () serializer_class=app01_serializers.SchoolSerializer def get(自我、请求、pk * args, * * kwargs): 回归自我。检索(请求、pk * args, * * kwargs) def post(自我,请求,* args, * * kwargs): 回归自我。创建(请求、* args * * kwargs)
<>强路由强>
url (r 'school/$’, views.SchoolView.as_view ()), url (r 'school/(& # 63;术中;pk> \ d +)/$’, views.SchoolDetail.as_view ()),
<>强视图强>
从rest_framework。仿制药进口GenericAPIView ListCreateAPIView RetrieveUpdateAPIVie 类SchoolView (ListCreateAPIView): #创建 queryset=models.School.objects.all () serializer_class=app01_serializers.SchoolSerializer 类SchoolDetail (RetrieveUpdateDestroyAPIView): #更新 queryset=models.School.objects.all () serializer_class=app01_serializers.SchoolSerializer
路由同上
<>强视图强>
从rest_framework。viewsets进口ModelViewSet #里面封装了操作的所有方法,增删改查查 类SchoolView (ModelViewSet): queryset=models.School.objects.all () serializer_class=app01_serializers.SchoolSerializer
<>强路由强>
url (r 'school/$’, views.SchoolView.as_view(行动={ “获得”:“名单”, “post”:“创造”, })), url (r 'school/(& # 63;术中;pk> \ d +)/$’, views.SchoolView.as_view(行动={ “得到”:“检索”, “把”:“更新”, “补丁”:“partial_update”, “删除”:“破坏” })),
<>强视图
强>
同上
<>强路由
强>
从rest_framework。路由器进口DefaultRouter 路由器=DefaultRouter () 路由器。注册(r 'school’, views.SchoolView) urlpattern +=router.urlsDjango框架休息视图和路由详解