百度站长工具收费吗,好久不见在线观看免费高清,文山网站建设哪家好,网站开发已有的知识储备文章目录 一、DRF类视图介绍APIViewGenericAPIView类ViewSet类ModelViewSet类重写方法 二、Request与ResponseRequestResponse 参考 一、DRF类视图介绍
在DRF框架中提供了众多的通用视图基类与扩展类#xff0c;以简化视图的编写。 • View#xff1a;Django默认的视图基类以简化视图的编写。 • ViewDjango默认的视图基类负责将视图连接到URLHTTP请求方法的基本调度
• APIViewDRF提供的所有视图的基类继承View并扩展具备了身份认证、权限检查、流量控制等功能。
• GenericAPIView对APIView更高层次的封装例如增加分页、过滤器
• GenericViewSet继承GenericAPIView和ViewSet
• ViewSet继承APIView并结合router自动映射路由
• ModelViewSet继承GenericAPIView和五个扩展类封装好各种请求更加完善业务逻辑基本不用自己写了。
APIView
示例
class UserView(APIView):def get(self, requset, pkNone):if pk:user_obj User.objects.get(idpk) # 获取单个用户数据user_ser UserSerializer(user_obj)else:queryset User.objects.all() # 获取所有用户# 调用序列化器将queryset对象转换为jsonuser_ser UserSerializer(queryset, manyTrue) # 如果序列化多条数据需要指定manyTrueres {code: 200, msg: 获取用户成功, data: user_ser.data}return Response(res) # 从.data属性获取序列化结果def post(self, request):user_ser UserSerializer(datarequest.data) # 调用序列化器将传入的数据反序列化转换为Python对象if user_ser.is_valid(): # 验证数据格式是否正确user_ser.save() # 保存数据到数据库msg 创建用户成功code 200else:msg 数据格式不正确code 400res {code: code, msg: msg}return Response(res)GenericAPIView类
GenericAPIView对APIView更高层次的封装实现以下功能
• 增加queryset属性指定操作的数据不用再将数据传给序列化器会自动实现。
• 增加serializer_class属性直接指定使用的序列化器
• 增加过滤器属性filter_backends
• 增加分页属性pagination_class
• 增加lookup_field属性和实现get_object()方法用于获取单条数据可自定义默认分组名pk示例
ViewSet类
GenericAPIView已经完成了许多功能但会有一个问题获取所有用户列表和单个用户需要分别定义两个视图和URL路由使用ViewSet可以很好解决这个问题并且实现了路由自动映射。
ViewSet视图集不再实现get()、post()等方法而是实现以下请求方法动作
• list()获取所有数据
• retrieve()获取单个数据
• create()创建数据
• update()更新数据
• destory()删除数据示例 自定义路由 在路由这块定义与之前方式一样每个API接口都要写一条URL路由但实际上我们用ViewSet后就不用自己设计URL路由及绑定HTTP方法了会自动处理URL路由映射
ModelViewSet类
ModelViewSet继承GenericAPIView和五个扩展类封装好各种请求更加完善业务逻辑基本不用自己写了只需要指定serializer_class和queryset就可以直接进行增删改查
class UserViewSet(ModelViewSet):queryset User.objects.all() # 指定操作的数据serializer_class UserSerializer # 指定序列化器重写方法
由于ModelViewSet有较高的抽象实现自动增删改查功能。对于增、改在很多场景无法满足需求这就需要重写对应方法了。
示例重写create()方法修改数据和响应内容格式
二、Request与Response
Request
DRF传入视图的request对象不再是Django默认的HttpRequest对象而是基于HttpRequest类扩展后的Request类的对象。
Request对象的数据是自动根据前端发送的数据统一解析数据格式
常用属性 • request.data返回POST提交的数据与request.POST类似 • request.query_params返回GET URL参数与request.GET类似
Response
DRF提供了一个响应类Reponse响应的数据会自动转换符合前端的JSON数据格式。
导入 from rest_framework.response import Response
格式 Response(data, statusNone, template_nameNone, headersNone, content_typeNone) • data响应序列化处理后的数据传递python对象 • status状态码默认200 • template_name模板名称 • headers用于响应头信息的字典 • content_type响应数据的类型
使用方法return Reponse(datadata, statusstatus.HTTP_404_NOT_FOUND)
为了方便设置状态码rest_framework.status模块提供了所有HTTP状态码以下是一些常用的
• HTTP_200_OK请求成功
• HTTP_301_MOVED_PERMANENTLY永久重定向
• HTTP_302_FOUND临时重定向
• HTTP_304_NOT_MODIFIED请求的资源未修改
• HTTP_403_FORBIDDEN没有权限访问
• HTTP_404_NOT_FOUND页面没有发现
• HTTP_500_INTERNAL_SERVER_ERROR服务器内部错误
• HTTP_502_BAD_GATEWAY网关错误
• HTTP_503_SERVICE_UNAVAILABLE服务器不可达
• HTTP_504_GATEWAY_TIMEOUT网关超时参考
https://www.aliangedu.cn/course/learn?cid20sid10pid2197