【问题标题】:tastypie POST method return an dict key is error but empty value美味派 POST 方法返回一个 dict 键是错误但为空值
【发布时间】:2014-02-02 07:16:48
【问题描述】:

我有一个关于 django sweetpie 的问题,我想将数据发布到 api, 但它返回 400,错误消息为空 我的资源是 non-orm,所以我重写了 obj_create 方法 但 GET 方法效果很好。 这是我的代码

class DitcObject(object):

    def __init__(self, initial=None):
        self.__dict__['_data'] = {}

        if hasattr(initial, 'items'):
            self.__dict__['_data'] = initial

    def __getattr__(self, item):
        return self._data.get(item, None)

    def __setattr__(self, key, value):
        self.__dict__['_data'][key] = value

    def to_dict(self):
        return self._data

class QueueResource(Resource):

    qid = fields.CharField(attribute='qid')
    queue = fields.CharField(attribute='queue')

    class Meta:
        resource_name = 'queue'
        object_class = DitcObject
        authorization = Authorization()

    def _client(self):
        return RedisTool().get_redis()

    def detail_uri_kwargs(self, bundle_or_obj):
        kwargs = {}

        if isinstance(bundle_or_obj, Bundle):
            kwargs['pk'] = bundle_or_obj.obj.qid
        else:
            kwargs['pk'] = bundle_or_obj.qid

        return kwargs

    def get_object_list(self, request):
        queues = filter(lambda item:re.match(r'%s_update_plan\..+\..+' % PRO_FLAG, item), self._client().keys())
        results = []

        for result in queues:
            new_obj = DitcObject(initial={'queue': list(self._client().smembers(result))})
            new_obj.qid = result
            results.append(new_obj)

        return results

    def obj_get_list(self, bundle, **kwargs):
        qid = bundle.request.GET.get('qid')
        if qid:
            return [obj for obj in self.get_object_list(bundle.request) if obj.qid == qid]
        return self.get_object_list(bundle.request)

    def obj_get(self, bundle, **kwargs):
        queue = self._client().smembers(kwargs['pk'])

        return DitcObject(initial={'queue': list(queue), 'qid': kwargs['pk']})

    def obj_create(self, bundle, **kwargs):
        bundle = self.full_hydrate(bundle)
        print kwargs
        return bundle

这是我的错误返回

HTTP/1.0 400 BAD REQUEST
Date: Tue, 14 Jan 2014 09:20:35 GMT
Server: WSGIServer/0.1 Python/2.7.3
Content-Type: application/json

{"error": ""}

谢谢大家!

【问题讨论】:

  • 请提供所有相关代码。
  • 我现在提供整个代码
  • 您在开发服务器日志中看到任何有用的信息吗?
  • 你能显示你正在提交的 POST 请求吗?

标签: python django post tastypie


【解决方案1】:

很有可能您是POST-ing JSON 数据,而您忘记用双引号 " 括住 JSON 数据的键。

这是我刚开始使用 TastyPie 时面临的一件事。

【讨论】:

  • 这个答案刚刚为我解决了一个非常令人沮丧的问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 2014-07-03
  • 2012-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多