首页 > 其他分享 >drf之全局异常处理和 接口文档

drf之全局异常处理和 接口文档

时间:2023-05-26 19:33:40浏览次数:31  
标签:exception rest 文档 接口 异常 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

标签:exception,rest,文档,接口,异常,drf
From: https://www.cnblogs.com/yuezongke/p/17435630.html

相关文章

  • 8、Hystrix 线程池隔离与接口限流
    线程池隔离技术的设计原则Hystrix采取了bulkhead舱壁隔离技术,来将外部依赖进行资源隔离,进而避免任何外部依赖的故障导致本服务崩溃线程池隔离,学术名称:bulkhead,舱壁隔离外部依赖的调用在单独的线程中执行,这样就能跟调用线程隔离开来,避免外部依赖调用timeout耗时过长,导致调用线程......
  • drf之restful规范中的过滤、排序和分页
    目录一、过滤内置过滤类第三方过滤类自定义过滤类价格再100----200之间的图书二、排序三、分页作业过滤和排序带分页一、过滤restful规范中-请求地址中带过滤条件带过滤的接口只有:查询所有内置过滤类fromrest_framework.filtersimportSearchFilterclassBookView(G......
  • Java笔记(十):函数式接口
    函数式接口有且仅有一个抽象方法的接口JDK8中,只有一个抽象方法的接口称为函数式接口,我们就能使用Lambda。针对一个接口中,是否有大于一个抽象方法?JDK8为我们新增了一个注解:@FunctionalInterface。它能够帮助我们检测这个接口是不是只有一个抽象方法,如果有两个抽象方法,则会报......
  • 软件开发全部文档下载(超过三百份)
    写在前面软件开发过程中,会涉及到和产生大量的配套文档,例如项目启动阶段、项目调研阶段、项目开发阶段、项目验收维护阶段等,有开发类型的文档,还有管理类型的文档,还有报告类型的文档。针对软件过程中所有阶段的文档我这次做了一个整理,总计超过三百份。获取方式q:262086839。具体......
  • drf——基于apiview写过滤、排序和分页
    基于APIView带过滤和排序fromrest_framework.viewsimportAPIViewfrom.modelsimportBookfrom.serializerimportBookSerializerfromrest_framework.responseimportResponseclassBookView(APIView):#/books/?ordering=-price&name=红楼梦defget(self,......
  • 亚马逊平台API接口是什么?
    亚马逊商品API接口是基于REST(RepresentationalStateTransfer)架构的。该API允许开发人员与亚马逊商品数据库进行交互,以获取商品信息、图像、评论和其他相关数据。亚马逊商品API接口提供了许多RESTful服务,以帮助开发人员构建良好的网络应用程序。亚马逊商品API的请求和响应格式是......
  • 考古笔记6:单臂路由子接口实现VLAN间通讯
    拓扑构成拓扑:配置过程配置信息:R1R1#conftEnterconfigurationcommands,oneperline.EndwithCNTL/Z.R1(config)#interfacef0/0R1(config-if)#noshutR1(config-if)#interfacef0/0.1R1(config-subif)#encapsulationdot1Q10//后面的数字1代表是的侦听VLAN号为10......
  • EasyDSS调用录像回看接口出现报错“请先合成mp4”,是什么原因?
    EasyDSS支持一站式的上传、转码、直播、回放、嵌入、分享功能,具有多屏播放、自由组合、接口丰富等特点。平台可以为用户提供专业、稳定的直播推流、转码、分发和播放服务,全面满足超低延迟、超高画质、超大并发访问量的要求。有用户反馈,在调用录像回看接口中的指定时间段录像播放及......
  • EasyDSS如何调用接口获取录像MP4文件合成状态?
    EasyDSS互联网视频云服务的视频直播/点播功能支持视频采集、编辑、上传、媒体资源管理、自动化转码处理、分发服务等,帮助用户快速搭建拥有极致观看体验、安全可靠的视频直播点播应用。有用户反馈在调用接口时,会出现合成中的字样,并不知道合成的录像MP4文件是否已经合成完毕。今天我......
  • 复制文档到剪切板中空格,换行等会丢失的问题
    之前处理了fetch流的问题的时候,后端返回的流是含有空格、换行等内容的,然后要将这个流复制到剪切板中。就发现空格丢失部分,换行全部丢失了发现问题解决问题,就去找为什么复制到剪切板中空格、换行会丢失。 letcontent='abcddef^'//包含换......