代码优化-统一管理错误信息
在本节中,我们将通过统一管理错误信息的方式来优化代码,并且将错误码和错误信息存储在一个单独的文件中。这样做的好处在于可以减少魔鬼数字的出现,并且方便维护和更新错误信息。
错误管理
首先,我们需要在dx_movie下新建一个utils文件夹,然后在utils下创建一个error.py文件来统一管理错误信息。在该文件中,我们可以定义不同类别的错误,并为每种错误定义一个错误码和错误信息。
例如,我们可以定义一个MovieError类,用于存储与电影相关的错误信息。我们可以为每个错误定义一个类属性,其中包括错误码和错误信息。这样,我们就能够通过MovieError.MovieNotFound访问电影未找到的错误信息。
以下是一个示例:
class MovieError():
MovieNotFound = (10001, '电影信息不存在')
# 其他电影相关的错误信息...
class UserError():
UserNotFound = (20001, '用户信息不存在')
CollectMovieFailed = (20002, '收藏电影失败')
CancelMovieFailed = (20003, '取消电影失败')
NotCollectMovie = (20004, '未收藏该电影')
# 其他用户相关的错误信息...
统一返回格式
为了统一返回格式,我们可以创建一个response_data函数,用于将错误信息转化为字典格式。该函数接收 status_code、message和data等参数,并返回一个字典。
以下是一个示例:
def response_data(status_code=0, message=None, data={}, **kwargs):
return dict({
'status_code': status_code,
'message': message,
'data': data
}, **kwargs)
使用response_data函数,我们可以将错误信息以字典的形式返回给前端。例如,我们可以使用response_data函数来返回MovieError.MovieNotFound错误:
return ResponseData(*MovieError.MovieNotFound)
这样,我们就将错误信息转化为了以下字典形式:
{
'status_code': 10001,
'message': '电影信息不存在',
'data': {}
}
使用错误管理
在代码中,我们只需要引入error.py文件,并使用相应的错误类和错误码即可。通过使用错误管理,我们可以更好地组织错误信息,并且当需要修改错误信息时,我们只需要在error.py文件中更新,而无需修改其他代码。
例如,在account/views.py文件中,我们将原来的return Response进行修改,示例代码如下所示:
from utils.error import UserError, MovieError, response_data
class CollectViewSet(viewsets.ModelViewSet):
def create(self, request):
user = request.user
profile = Profile.objects.get(user=user)
movie_id = request.data['movie_id']
try:
movie = Movie.objects.get(id=movie_id)
profile.movies.add(movie)
return Response({
'status_code': 0,
'message': '收藏成功'
})
except ObjectDoesNotExist:
# return Response({
# 'status_code': 10001,
# 'message': '电影信息不存在'
# })
return Response(response_data(*MovieError.MovieNotFound))
except:
return Response(response_data(*UserError.CollectMovieFailed))
def destroy(self, request, pk):
user = request.user
profile = Profile.objects.get(user=user)
try:
movie = Movie.objects.get(id=pk)
if movie not in profile.movies.all():
return Response(response_data(*UserError.NotCollectMovie))
profile.movies.remove(movie)
return Response({'status_code':0,
'message': '取消收藏成功'})
except ObjectDoesNotExist:
return Response(response_data(*MovieError.MovieNotFound))
except:
return Response(response_data(*UserError.CancelMovieFailed))
原来代码中包含错误信息的,小伙伴都可以通过这种方式来处理。
总结
本节中,我们通过统一管理错误信息的方式来优化了代码。将错误码和错误信息存储在一个单独的文件中,可以方便维护和更新错误信息,并且可以减少错误码的出现。同时,我们通过使用ResponseData函数,可以统一返回格式,并且将错误信息转化为字典形式。这样做不仅提高了代码的可读性,还能更好地组织和管理错误信息。
我们在项目开发过程中可以根据实际需求来定义错误类和错误码,并根据返回的状态码来显示正确的错误信息。这种统一的错误管理方式能够提高代码的可维护性和可扩展性,使我们的项目更加健壮和稳定。
【大熊课堂精品课程】
Python零基础入门动画课: https://www.bilibili.com/cheese/play/ss7988
Django+Vue:全栈开发: https://www.bilibili.com/cheese/play/ss8134
PyQT6开发桌面软件: https://www.bilibili.com/cheese/play/ss12314
Python办公自动化: https://www.bilibili.com/cheese/play/ss14990
Cursor AI编程+MCP:零基础实战项目课: https://www.bilibili.com/cheese/play/ss105194189
Pandas数据分析实战: https://www.bilibili.com/cheese/play/ss734522035
AI大模型+Python小白应用实战: https://www.bilibili.com/cheese/play/ss3844