drf之全局异常处理和 接口文档
目录
一、全局异常处理
对于前端来讲,后端即便报错,也要返回统一的格式,前端便于处理
只要三大认证,视图类的方法出了异常,都会执行一个函数:
rest_framework.views import exception_handler
注意:exception_handler
# 如果异常对象是drf的APIException对象,就会返回Response # exception_handler只处理了drf的异常,其它的异常需要我们自己处理 # 如果异常对象不是drf的APIException对象,就会返回None
补充:
# isinstance() 判断一个对象是不是某个类的对象 isinstance(对象,类) # issubclass() 判断一个类,是不是另一个类的子类
新建一个exception文件放我们自己写的异常方法
from rest_framework.response import Response from rest_framework.views import exception_handler # 如果异常对象是drf的APIException对象,就会返回Response # exception_handler只处理了drf的异常,其它的异常需要我们自己处理 # 如果异常对象不是drf的APIException对象,就会返回None # isinstance() 判断一个对象是不是某个类的对象 isinstance(对象,类) # issubclass() 判断一个类,是不是另一个类的子类 def common_exception_handler(exc, context): # 只要走到这里,一定出异常了,我们正常的项目要记录日志(后面讲) # 两种可能:一个是Response对象,一个是None res = exception_handler(exc, context) if res: # 说明是drf的异常,它处理了 if isinstance(res.data, dict): detail = res.data.get('detail') else: detail = res.data return Response({'code': 998, 'msg': detail}) else: # 说明是其它异常,它没有处理 # return Response({'code': 999, 'msg': '系统异常,请联系系统管理员'}) return Response({'code': 999, 'msg': str(exc)})
配置文件
REST_FRAMEWORK = { 'EXCEPTION_HANDLER': 'app01.excepitons.common_exception_handler',
}
二、接口文档
后端把接口写好后
-登录接口 -注册接口 -查询所有图书带过滤接口
前端人员需要根据接口文档,进行前端开发
前后端需要做对接----》对接第一个东西就是这个接口文档---》前端照着接口文档开发
公司3个人,每个人开发了10个接口,3个人都要同时写接口文档
接口文档的编写形式
-1 world,md,编写,大家都可以操作,写完放在git,公司的文档管理平台上 -2 第三方的接口文档平台(收费) https://www.showdoc.com.cn/ -3 公司自己开发接口文档平台 -4 公司使用开源的接口文档平台,搭建 -YAPI:百度开源的 -https://zhuanlan.zhihu.com/p/366025001 -5 项目自动生成接口文档 -coreapi -swagger
使用coreapi自动生成接口文档 (文件drf_09)
-使用步骤: -1 安装:pip3 install coreapi -2 加一个路由 from rest_framework.documentation import include_docs_urls urlpatterns = [ path('docs/', include_docs_urls(title='站点页面标题')) ] -3 在视图类上加注释 -4 配置文件中配置: 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema', -5 表模型或序列化类的字段上写 help_text--->会显示在接口文档的字段介绍上 -6 访问地址: http://127.0.0.1:8000/docs/
#### 2 自动生成接口文档 from rest_framework import generics from rest_framework.generics import GenericAPIView from rest_framework import mixins from rest_framework.viewsets import GenericViewSet class BookListView(generics.ListAPIView): queryset = Book.objects.all() serializer_class = BookSerialzer def get(self, request): """ 你能看到这个注释 """ return super().list(request) class BookListCreateView(generics.ListCreateAPIView): queryset = Book.objects.all() serializer_class = BookSerialzer """ get: 返回所有图书信息.仔细看看 post: 新建图书. """ class BookInfoViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, GenericViewSet): """ list: 返回图书列表数据 retrieve: 返回图书详情数据 latest: 返回最新的图书数据 read: 修改图书的阅读量 """
本文作者:Python学习之旅
本文链接:https://www.cnblogs.com/yuezongke/p/17435630.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步