You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:18:03