【问题标题】: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,谢谢。