我有一些现有的python代码,它使用django-piston返回一个字典作为响应。例如:
from piston.handler import BaseHandler
class FooHandler(BaseHandler):
allowed_methods = ('GET',)
@classmethod
def create(self, request):
return { 'foo': 'bar' }这段代码可以很好地工作,并使用适当的HTTP标头集序列化为JSON (我假设这是通过涉及发射器的一些活塞魔术来工作的;要获得额外的好处,请随时解释这个行为是如何工作的,因为我还在学习django- piston )。
我需要能够以任意的方式修改响应,例如设置报头、状态代码等,而不使用为特定目的设计的预烘焙解决方案。有没有一种方便的方法来访问此代码上下文中的响应对象并对其进行操作,或者响应对象尚未创建?为了访问响应对象,我是否必须手动构造它(就像香草django一样),序列化字典,并手动设置适当的头文件,从而失去django-piston的一些有用的魔力?
发布于 2011-02-10 15:59:28
每个django-piston方法都返回一个HTTPResponse。
当你返回字典时,django-piston只是将其序列化,并将其粘贴到它精心制作的HTTPResponse中。
令人惊讶的是,维基中所有django-piston示例中的"return rc.CREATED“行都只是带有HTTP代码和响应体的过于简单的响应。
看看这里:https://bitbucket.org/jespern/django-piston/src/c4b2d21db51a/piston/utils.py
在rc_factory类中,它创建了各种简单的HTTPResponse对象以用于Piston。
至少你可以观察他们是如何做到这一点的,然后制作你自己的。
但是你的问题“我能做一个自定义的HTTPResponse吗?”的答案是肯定的,你可以。当然,这就是web服务器所做的事情。
发布于 2011-07-22 02:04:56
可以通过从处理程序方法返回HttpResponse对象来设置自定义响应代码。
return HttpResponse({'foo': 'bar'}, status=404)不幸的是,你不能用同样的方式设置头文件。为此,您必须编写一个自定义发射器来设置所需的标头。一些类似的方法可能会起作用:
class CustomEmitter(JSONEmitter):
def render(self, request):
content = super(CustomEmitter, self).render(request)
response = HttpResponse(content)
response['Cache-Control'] = 'max-age=60'
Emitter.register('json', CustomEmitter, 'application/json; charset=utf-8')发布于 2011-02-10 16:54:37
您说得很对,django-piston使用发射器来序列化/反序列化请求和响应。您甚至可以注册自己的发射器与活塞,并让它使用这些。
有几种方法可以确定格式应该是什么。
1. mime-type
2. <format> in your URL
3. .json at the end of your URL您想要操作哪些特定的标头?可能会有其他的解决方案,而不只是修改response对象。
https://stackoverflow.com/questions/3673240
复制相似问题