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:
    修改图书的阅读量
    """

image

posted @ 2023-05-26 19:26  岳宗柯  阅读(59)  评论(0编辑  收藏  举报