2013-08-19 17 views
1

有誰知道什麼是移動的是它和每個請求返回出去的HTTP標頭,而不是元信息的「最好」的方式?如何移動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'] 

從有人已經做過類似的事情有什麼建議?

回答

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 
+0

的確。感謝您指點我正確的方向。 – mimoralea

1

如果有人需要同樣的事情,這是我如何能夠得到它的工作......感謝格雷格。

我創建了一個從tastypie 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 

再次,充分肯定格雷格,謝謝。