1.View:Django默认的视图基类,Django的HttpRequeset对象
2.APIView:REST-framework提供的所有视图的基类,继承自Django的View
REST framework的Request对象
Request对象的数据是自动根据前端发送数据的格式进行解析之后的结果。
serializer = BookSerializer(book,many=True) 序列化,获取字段
serializer.data 获取序列化后的数据
serializer = BookSerializer(data=data) 反序列化,传入字段
serializer.is_valid(raise_exception=True) 校验并返回错误
3.GenericAPIView:继承自APIView,增加列表视图和详情视图的通用方法和属性
https://blog.csdn.net/qq_31742423/article/details/83241461
属性:提前将要调用的设置好,方法中直接调用就可以
queryset 设置结果集 ~queryset = BookInfo.objects.all()
serializer_class 设置序列化器 ~serializer_class = BookSerializer
lookup_field 查询指定的对象,默认为'pk' ~lookup_field = 'id'
方法:
get_queryset(self) 返回视图使用的查询集 ~books = self.get_queryset()
get_serializer(self,_args, *_kwargs) 返回序列化器对象 ~serializer = self.get_serializer(book)
get_object(self) 返回详情视图所需的模型类数据对象 ~book = self.get_object()
ListModelMixin 列表,获取全部对象
CreateModelMixin 新增资源
RetrieveModelMixin 索引,获取一个资源
UpdateModelMixin 更新一个资源
DestoryModelMixin 损毁,删除一个资源
调用的时候和GenericAPIView一样放在类的括号里,好像光放置首字母大写也可以
Patch 补丁,局部更新某一属性,user_name,Put方法的补充
4.三级视图(对GenericAPIView和Mixin的直接封装)
第3和4算是一种关系
mixins类,会返回不同的状态码
CreateAPIView 创造
ListAPIView 列表
RetrieveAPIView 检索
DestroyAPIView 损毁
UpdateAPIView 更新
ListCreateAPIView 列表创造
RetrieveUpdateAPIView 检索更新
RetrieveDestroyAPIView 检索删除
RetrieveUpdateDestroyAPIView 检索更新删除
导入封装的模型,通过下面就可以更加简洁
from rest_framework import mixins
class ProjectsView(mixins.ListModelMixin,
mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
GenericAPIView):
增加所需属性
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
5.ViewSet:继承自APIView
router = DefaultRouter() 创建默认的本机地址
router.register(r'booklist',views.BookModelViewset)
会生成两种url
user/ 列表
user/3 详情
urlpatterns += router.urls 将建立好的url放在地址列表中
需要继承viewsets.ViewSet类
类的函数不需要使用get\post\delete等,可以自建其他函数,然后在路由中转
path('user/',view.MyViewSet.as_view({
'get':'list',
}))
https://zhuanlan.zhihu.com/p/72527077
序列化:将数据库的数据模型转化为前端所需要的格式(json等)
反序列化:可以验证传入数据是否规范并保存
反序列化:拿到前端数据->序列化器的data->调用序列化器的is_vaid()方法
校验->调用序列化器的.sava()方法保存
~~~url.py~~~
viewsets
封装drf路由
from rest_framework.routers import DefaultRouter
创建路由器
router=DefaultRouter()
注册路由
router.register(r'user_model_view_set',views.UserModelViewSet)
将生成好的路由放在原路由
urlpatterns+=router.urls
~~~views.py~~~
这里使用的viewset
from rest_framework import viewsets
from rest1.serializers import UserModelViewSetSerializers
ViewSet
class UserModelViewSet(viewsets.ModelViewSet):
queryset = UserInfo.objects.all()
serializer_class = UserModelViewSetSerializers
lookup_field = 'id'
~~~serializers.py~~~
ModelSerializer
class UserModelViewSetSerializers(serializers.ModelSerializer):
定义序列化器
class Meta做为嵌套类,主要目的是给上级类添加一些功能或者标准
class Meta:
指定序列化从那个模型映射字段
model=UserInfo
映射所有字段
fields='all'