Django视图中如何让校验函数出错时直接返回400响应给用户?
实现步骤
1. 调整校验函数 validate_video_upload
将原有的抛出异常逻辑改为:校验不通过时返回400响应对象,校验通过时返回None,修改后的代码如下(按需对应你的项目框架导入响应类):
# 若使用DRF框架导入这个响应类 from rest_framework.response import Response # 若使用原生Django导入这个响应类:from django.http import HttpResponseBadRequest def validate_video_upload(file): if not is_valid_file_of_format(file._name, VALID_VIDEO_EXTENSIONS): # DRF写法:返回带错误信息的400响应 return Response({"msg": "视频文件格式无效"}, status=400) # 原生Django写法:return HttpResponseBadRequest("视频文件格式无效") if file.size>2296000000: return Response({"msg": "视频最大允许上传大小为287MB"}, status=400) # 原生Django写法:return HttpResponseBadRequest("视频最大允许上传大小为287MB") # 所有校验项都通过,返回空 return None
如果你只需要大小超标场景返回400,格式错误仍保留抛出ValidationError的逻辑,只修改大小校验分支的代码即可,格式校验分支保留原有raise语句。
2. 修改视图POST逻辑
调用校验函数后接收返回值,判断如果是响应对象就直接返回给客户端,否则继续执行后续业务逻辑:
def post(self, request): if 'video' in request.FILES.keys(): vid = request.FILES.get('video') validation_resp = validate_video_upload(vid) # 检查校验是否返回了错误响应 if validation_resp is not None: return validation_resp # 校验通过,后续正常业务逻辑 # ... 你的其他代码
内容的提问来源于stack exchange,提问作者user12314098
相关产品推荐
相关产品推荐

