20 全局异常处理
今日内容
0 全局异常处理
# 无论访问接口是否正常,都返回统一的格式
# drf内置有统一的异常处理(认证,失败抛异常),APIException及其子类的已经处理了,但是其他异常没有处理
# from rest_framework.views import exception_handler 就是drf的异常处理,不满足咱们的需求,无论什么异常,都统一处理,重写一个函数
models.py
from django.db import models
# Create your models here.
class User(models.Model):
username=models.CharField(max_length=32)
password=models.CharField(max_length=32)
views.py
class LoginView(APIView):
def post(self,request):
response={'code':101,'msg':'用户名或密码错误'}
username=request.data.get("username")
password=request.data.get("password")
user=User.objects.filter(username=username,password=password)
if user:
response['code']=100
response['msg']='登录成功'
return Response(response)
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', LoginView.as_view()),
]

为了统一异常格式,就用到了全局异常处理
common.py
from rest_framework.views import exception_handler
from rest_framework.response import Response
def common_exception_handler(exc, context):
# res如果是Response,表示是drf的异常,并且处理好了,如果是None,表示其他异常,并没有处理
res = exception_handler(exc, context) # 这个函数的执行,会处理drf的异常
# 重点,要在这里记录日志(程序出错了,才会走到这)
if res:
return Response(data={'code': 888, 'msg': res.data.get('detail')})
else:
return Response(data={'code': 999, 'msg': '服务器内部错误,请联系系统管理员'})
settings.py
REST_FRAMEWORK = {
# 这样配置,一旦出了异常,就会走这个函数,exception_handler内置的不满足咱们的的需求
'EXCEPTION_HANDLER': 'app01.common.common_exception_handler',
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用