我只花了20分钟的调试一些(Django的)单元测试。 我在测试一个浏览后,我期待一个302返回码,之后我认定了一堆被预期数据库实体。 原来最近提交合并增加了一种新形式的领域,我的测试失败,因为我并没有包括正确的表单数据。
问题是,该测试失败,因为HTTP返回码为200,而不是302,我只能通过打印响应HTTP,并通过它寻找工作出了问题。 除了有看通过HTML工作出了问题的刺激,200似乎是为没有得到处理的POST错误的代码。 出现4xx(客户端错误)似乎更合适。 此外,它会使调试测试不在话下,作为响应代码会指着我直的问题。
我读过关于使用422(无法处理的实体)的REST API的内可能返回代码,但无法找到HTML视图/处理程序中使用它的任何证据。
我的问题是 - 任何人这样做,如果没有,为什么不呢?
[UPDATE 1]
只是为了澄清,这个问题涉及到HTML表单,而不是一个API。
这也是一个关于HTTP响应代码本身的问题 - 没有Django的。 这恰好是我使用的是什么。 我已经删除了Django的标签。
[UPDATE 2]
一些进一步的澄清,与W3C引用( http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html ):
10.2成功2XX
这个类的状态代码表示客户端的请求被成功接收,理解和接受。
10.4客户端错误4XX
该4XX类的状态代码是用于在客户端似乎有错误的案件。
10.4.1 400错误的请求
请求不能被服务器因为语法错误的理解。
而从https://tools.ietf.org/html/rfc4918#page-78
11.2。 422无法处理的实体
的422(无法处理的实体)状态代码表示的服务器理解的内容类型的请求实体(因此一个415(不支持的媒体类型)状态代码是不适当的),并且所述请求实体的语法是正确的(因此400(错误的请求)状态码是不合适的),但无法处理所包含的指令。 例如,如果XML请求主体包含合式(即语法正确),可能会发生这种错误情况,但语义错误,XML指令。
[UPDATE 3]
在将其挖掘,422是一个WebDAV扩展[1],这可以解释它的模糊。 这就是说,由于Twitter的使用420为自己的目的,我想我就不管我想要的。 但它会以4开头。
[UPDATE 4]
在使用定制响应代码,以及应如何被处理(如果未识别)指出,从HTTP 1.1规范( http://tools.ietf.org/html/rfc2616#section-6.1.1 ):
HTTP状态代码是可扩展的。 HTTP应用不要求了解全部注册的状态代码的含义,尽管这种理解显然是不可取的。 然而,应用程序必须理解类的任何状态代码,由第一个数字指示,并当作是等同于类的X00状态代码,不同的是一个无法识别的反应绝不能缓存无法识别的响应。 例如,如果客户端收到的431无法识别的状态码,它可以安全地假设有一些错误的请求和处理响应,如果它已经收到了400个状态码。 在这种情况下,用户代理应当呈现给实体与所述响应中返回的用户,因为该实体可能包括人可读的信息,这将解释异常状态。
[1] https://tools.ietf.org/html/rfc4918