在ModelViewSet中返回422状态码

问题描述 投票:0回答:2

为了与 EmberData 进行互操作,似乎每当发生验证错误时,我都需要 回复 422 (

Unprocessable Entity
) 而不是 400 (
Bad Request
)。我有两个问题:

还有奖励:

  • 为什么 EmberData 期待 422?据我所知,这不是 JSONAPi 规范的一部分。
django ember.js ember-data django-rest-framework json-api
2个回答
8
投票

422 是 WebDAV DRF 的一部分,其错误代码不在 DRF 中。 这并不妨碍您使用它。它们只是数字本身的人类可读版本。

一种选择是覆盖

rest_framework.exceptions.ValidationError.status_code
并将其设置为 422。

编辑 - 更改默认错误代码:

# At the top of a views.py file, by the ends of import add:
from rest_framework.exceptions import ValidationError
ValidationError.status_code = 422

0
投票

如果您使用纯 Django,您可以创建自定义响应,如下所示:

from http import HTTPStatus
from django.http import HttpResponse


class HttpResponseUnprocessableEntity(HttpResponse):
    status_code = HTTPStatus.UNPROCESSABLE_ENTITY

考虑之前检查 Django 是否尚未提供符合您需求的响应。这是关于它的 Django 文档会话

© www.soinside.com 2019 - 2024. All rights reserved.