【问题标题】:How to move the Tastypie meta information out to the http headers如何将 Tastypie 元信息移出 http 标头
【发布时间】:2013-08-21 11:07:09
【问题描述】:

有谁知道将每个请求返回的元信息移动到 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']

已经做过类似事情的人有什么建议吗?

【问题讨论】:

    标签: python http rest tastypie


    【解决方案1】:

    如果您的意思是将元信息从美味派返回的序列化数据移动到 响应 的 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
    

    【讨论】:

      【解决方案2】:

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

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

      从他的代码中,我只需要添加一些尝试,除了因为当您获取单个项目时,例如.../api/v1/user/2/ 元不存在并且抛出 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,谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-19
        • 2012-02-04
        • 1970-01-01
        • 2012-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多