Django ajax错误响应最佳实践

kav*_*yao 11 python django ajax jquery

我正在使用ajax来改善我的Django项目中的用户体验.我在这里关注的是如何正确地响应浏览器的错误.据我所知,我可以:

  1. 逐个验证请求数据并逐个保护异常.如果发生了不好的事情,请提高Http404或其他异常以明确宣布发生错误.要么
  2. 只需编写代码而无需异常处理,并假设它可以正常工作.如果发生了不好的事情,未捕获的异常将导致内部服务器错误,这仍然是浏览器的错误

对我来说,fisrt方法似乎更正统,因为在Python中,"明确比隐含更好"的哲学确实很重要.但是,由于从第二个中删除了各种异常检查,因此它更清晰,更少碎片,更易读.

我正在使用jQuery来处理ajax请求/响应,这两种方法似乎都有效.我的问题是:

  1. 两种方法都可以接受吗
  2. 其他Javascript库的第二种方法会失败吗?
  3. 这是什么最好的做法?

PS.我做了必要的数据验证.请不要为此偏离主题.:)

Mar*_*rau 17

如果您返回状态代码为4xx或5xx的响应,则这是一个错误,将触发jQueries error处理程序.虽然每次都可以简单地返回状态200并在JSON响应中使用"错误"字段(如dm03514所示),但这有两个原因:

  1. 它违反了良好的HTTP惯例.有一个原因可以定义大量的错误代码

  2. 您不能使用jQuery已经有错误处理程序的事实,它允许您将正常行为与错误处理分开.

大多数情况下,错误响应与非错误响应有很大不同所以将这些消息的处理放在一个JS代码中是没有意义的.因此,总而言之,使用状态为200的JSON响应作为正常响应,并返回(适当的!)4xx/5xx响应以查找错误.这些也可以携带JSON有效负载,因此您的服务器端可以添加有关错误的其他详细信息.