Tastypie反序列化导致{“错误”:“”}

时间:2014-02-15 20:47:33

标签: json django rest tastypie

我正在使用django的tastypie。我有一行代码:

data = self.deserialize(request, request.body, format=request.META.get('CONTENT_TYPE', 'application/json'))

我使用命令行中的代码将帖子请求发送到我的网络服务器:

curl -X post -d "{ 'username' : 'user', 'password' : 'password' }" http://127.0.0.1:8000/api/employee/login/ --header "Content-Type:application/json"

当我运行它时,它会产生

的json响应
{"error": ""}

查看我的服务器日志,我看到:

[15/Feb/2014 20:39:49] "post /api/user/login/ HTTP/1.1" 400 13

在反序列化行之前立即记录的日志消息将被成功记录,但是在反序列化行之后立即记录的日志消息将不会被记录,因此我非常确定反序列化是错误的。有谁知道什么可能是错的,或者我是否应该考虑其他问题?

1 个答案:

答案 0 :(得分:5)

您的JSON无效。请检查here。 400(错误的请求)状态应该给你线索。它应该是:{"username": "user", "password": "password"}Here你有一些解决方法如何在"命令中转义CURL char。不幸的是,Tastypie在没有消息的情况下引发异常,但是我们可以很容易地解决这个问题,以便将来为使用你的API的其他人节省时间。

from tastypie.exceptions import BadRequest
from tastypie.serializers import Serializer
class VerboseSerializer(Serializer):
    """
    Gives message when loading JSON fails.
    """
    # Tastypie>=0.9.6,<=0.11.0
    def from_json(self, content):
        """
        Override method of `Serializer.from_json`. Adds exception message when loading JSON fails.
        """
        try:
            return json.loads(content)
        except ValueError as e:
            raise BadRequest(u"Incorrect JSON format: Reason: \"{}\" (See www.json.org for more info.)".format(e.message))

class MyResource(BaseModelResource):
    class Meta:
        serializer = VerboseSerializer(formats=['json'])