【发布时间】:2011-01-21 04:42:26
【问题描述】:
我不想序列化任何东西。我只想返回相当于HttpResponse(blah)
【问题讨论】:
-
你真正想解决什么问题?
标签: python django rest http django-piston
我不想序列化任何东西。我只想返回相当于HttpResponse(blah)
【问题讨论】:
标签: python django rest http django-piston
听起来你想要一个字符串发射器,而不是内置的 JSONEmitter、XMLEmitter 等之一。
查看发射器的文档:https://bitbucket.org/jespern/django-piston/wiki/Documentation
这里现有的发射器定义: https://bitbucket.org/jespern/django-piston/src/c4b2d21db51a/piston/emitters.py
纯文本发射器的定义可能如下所示:
from piston.emitters import Emitter
from piston.utils import Mimer
class TextEmitter(Emitter):
def render(self, request):
return self.construct()
Emitter.register('text', TextEmitter)
Mimer.register('text', None, ('text/plain',))
你可以让你的资源在你的 urls.py 中使用这个发射器,如下所示:
urlpatterns = patterns('',
url(r'^blogposts$', resource_here, { 'emitter_format': 'text' }),
)
【讨论】:
要添加到 user85461 的答案,当您制作一个文本发射器时,您还需要制作一个文本 Mimer。我用 Piston 0.2.2 编写了以下代码
from piston.emitters import Emitter
from piston.utils import Mimer
class TextEmitter(Emitter):
def render(self, request):
return self.construct()
Emitter.register('text', TextEmitter, ('text/plain',))
Mimer.register(lambda x: QueryDict(x), ('text/plain',))
将此 sn-p 添加到将在您的处理程序之前运行的位置。我把它放在我的 API urls.py 上面,在那里我创建了我的Resources
resource_handler = Resource(handler=SomeHandler)
【讨论】:
在你看来:
class HttpResponsePlain(django.http.HttpResponse):
def serialize(self): return self.content
def serialize_headers(self): return ''
return HttpResponsePlain(content = 'That is plain text response!')
【讨论】: