如何将Tastypie元信息移出到http标头

时间:2013-08-19 15:21:12

标签: python http rest tastypie

有谁知道将每个请求返回的元信息移动到http标头的“最佳”方法是什么?

我打算做这样的事情:

def alter_list_data_to_serialize(self,request,data_dict):
        if isinstance(data_dict,dict):
            if 'meta' in data_dict:
                # grab each property of the data_dict['meta'] 
                #and put it on the request headers
            if 'objects' in data_dict:
                return data_dict['objects']

已经做过类似事情的人的任何建议?

2 个答案:

答案 0 :(得分:1)

如果您的意思是将序列化数据tastypie中的元信息返回到响应的HTTP标头,我认为您需要覆盖create_reponse方法。您没有alter_list_data_to_serialize提供的HttpResponse对象。这样的事情应该让你开始:

def create_response(self, request, data, response_class=HttpResponse, **response_kwargs):
    stripped_data = data.get('objects') or data
    desired_format = self.determine_format(request)
    serialized = self.serialize(request, stripped_data, desired_format)
    response = response_class(content=serialized,
                              content_type=build_content_type(desired_format),
                              **response_kwargs)
    # Convert meta data to HTTP Headers 
    for name, value in data.get('meta', {}).items():
        response[name] = str(value)
    return response

答案 1 :(得分:1)

如果有人需要相同的东西,这就是我能够让它运作的方式......感谢GregM。

我创建了一个继承自tastypie ModelResource的类,并对其进行了调整。然后,我的所有资源都使用我的课程。

从他的代码中,我只需要添加几个尝试,除非因为当你获得单个项目时。 ... / api / v1 / user / 2 / meta不存在,并且抛出了AttributeError异常。

然后,你应该好好去。

class MyModelResource(ModelResource):
    def create_response(self, request, data, response_class=HttpResponse, **response_kwargs):
        try:
            stripped_data = data.get('objects')
        except AttributeError:
            stripped_data = data
        desired_format = self.determine_format(request)
        serialized = self.serialize(request, stripped_data, desired_format)
        response = response_class(content=serialized,
                                  content_type=build_content_type(desired_format),
                                  **response_kwargs)
        # Convert meta data to HTTP Headers
        try:
            for name, value in data.get('meta', {}).items():
                response['Meta-' + name.title().replace('_','-')] = str(value)
        except AttributeError:
            response['Meta-Empty'] = True
        return response

再次,Greg完全赞同,谢谢。