今天早上,当我遇到一个我不知道如何解决的问题时,我正在用Tastypie开发我的Django REST API。 我有一个看起来像这样的资源:
class UserSignUpResource(ModelResource):
class Meta:
object_class = User
queryset = User.objects.all()
allowed_methods = ['post']
include_resource_uri = False
resource_name = 'newuser'
serializer = CamelCaseJSONSerializer(formats=['json'])
authentication = Authentication()
authorization = Authorization()
always_return_data = True
validation = FormValidation(form_class=UserSignUpForm)
此资源接收JSON格式的数据并创建一个新资源(我只允许POST操作)。因此,首先通过以下方式检查数据:
validation = FormValidation(form_class=UserSignUpForm)
问题是,如果数据不正确,它会返回 ImmediateHttpResponse 。但是我想捕获这个异常并创建一个像这样的JSON:
{"status": False, "code": 777, "errors": {"pass":["Required"], ...}
所以,我覆盖了 wrap_view 并添加以下代码段:
except ImmediateHttpResponse, e:
bundle = {"code": 777, "status": False, "error": e.response.content}
return self.create_response(request, bundle, response_class = HttpBadRequest)
此代码正确捕获异常,但它有问题。 e.response 包含带有错误的unicode字符串。所以,它最终给出的回应是
{"code": 777,
"error": "{\"birthdayDay\": [\"This field is required.\"],
\"birthdayMonth\": [\"This field is required.\"],
\"birthdayYear\": [\"This field is required.\"],
\"csrfmiddlewaretoken\": [\"This field is required.\"],
\"email\": [\"This field is required.\"],
\"email_2\": [\"This field is required.\"],
\"firstName\": [\"This field is required.\"],
\"gender\": [\"This field is required.\"],
\"lastName\": [\"This field is required.\"],
\"password1\": [\"This field is required.\"]}",
"status": false}
那该死的\和第一个"杀了我另一方面,正在使用AJAX的前端开发人员告诉我他无法解析错误。
我在这里做错了吗?有人知道如何将异常响应转换为JSON吗?
答案 0 :(得分:2)
您可能希望将响应内容发送为json,而不是序列化的json字符串:
import json
bundle = {"code": 777, "status": False, "error": json.loads(e.response.content)}