今日学习内容
-
前后端开发模式
-
API接口
-
postman使用
-
序列化和反序列化
-
restful规范
-
drf
:第三方app
>>>快速实现符合restful
规范的接口 -
视图类,都是继承
APIView
及其子类、 -
cbv的执行流程
-
路由中:视图类
.as_view()>>>View
的as_View
类的绑定方法>>>闭包函数View -
请求来了>>>执行闭包函数
view(request)
self.dispatch(request, *args, **kwargs)
-
View中返回dispatch
根据请求的方式,执行视图函数中以请求方式命名的方法 -
反射:通过字符串动态的获取,设置,判断,对象中的属性或方法
-
getattr : res = getattr(self, 'run', None) setattr : setattr(self, 'speak', 内存地址) hasattr : hasattr(self, 'run')
-
-
APIview
继承View, 执行流程-
APIView
的as_view
调用了父类的as_view
去掉了csrf
。请求来了,执行View
的as_view
的闭包view
>>>dispatch
实际上就是APIView
中的dispatch
- 核心代码中,产生了新的request
- 执行视图函数之前,执行三大认证
- 执行了视图函数,请求方式是什么,就执行视图函数中得什么方法
- 全局异常捕获,全局异常,统一返回格式
-
-
序列化类
Serializer
ModelSerializer
序列化
反序列化
校验
-
请求与响应
Request
类:属性和方法Response
类
-
视图层(2基类,5个扩展类,9个子类)
-
路由的使用
-
认证,频率,权限
-
过滤,排序,分页
-
全局异常处理
-
接口文档:自定生成
-
前后端分离:
jwt
认证方式---登录 -
公司内部:
RBAC
-
django:admin
美化
2个视图基类
类属性:
queryset = User.objects.all()
serializer_class = UserSerializer
方法:
self.get_object() # 根据pk获取单个数据
self.get_serializer # 获取要使用的序列化类
self.get_queryset() # 获取所有要序列化数据
基于APIView写5个接口
class UserView(APIView):
def get(self, request):
book_list = User.objects.all()
ser = UserSerializer(instance=book_list, many=True)
return Response(ser.data)
def post(self, request):
ser = UserSerializer(data=request.data)
if ser.is_valid():
ser.save()
return Response({'code': 100, 'msg': "新增成功"}, status=201)
else:
return Response({'code': 101, 'msg': ser.errors})
class UserDetailView(APIView):
def get(self, request, pk):
book = User.objects.filter(pk=pk).first()
ser = UserSerializer(instance=book)
return Response(ser.data)
def put(self, request, pk):
book = User.objects.filter(pk=pk).first()
ser = UserSerializer(instance=book, data=request.data)
if ser.is_valid():
ser.save()
return Response({'code': 100, 'msg': "修改成功"}, status=201)
else:
return Response({'code': 101, 'msg': ser.errors})
def delete(self, request, pk):
User.objects.filter(pk=pk).delete()
return Response('')
基于GenericAPIView写5个接口
from rest_framework.generics import GenericAPIView
class UserView(GenericAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
def get(self, request):
book_list = self.get_queryset()
ser = self.get_serializer(instance=book_list, many=True)
return Response(ser.data)
def post(self, request):
ser = self.get_serializer(data=request.data)
if ser.is_valid():
ser.save()
return Response({'code': 100, 'msg': "新增成功"}, status=201)
else:
return Response({'code': 101, 'msg': ser.errors})
class UserDetailView(GenericAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
def get(self, request, pk):
book = self.get_object()
ser = self.get_serializer(instance=book)
return Response(ser.data)
def put(self, request, pk):
book = self.get_object()
ser = self.get_serializer(instance=book, data=request.data)
if ser.is_valid():
ser.save()
return Response({'code': 100, 'msg': "修改成功"}, status=201)
else:
return Response({'code': 101, 'msg': ser.errors})
def delete(self, request, pk):
self.get_queryset().filter(pk=pk).delete()
return Response('')
作业: