【问题标题】:How do I use Django piston to return a response in text/plain?如何使用 Django 活塞以文本/纯文本形式返回响应?
【发布时间】:2011-01-21 04:42:26
【问题描述】:

我不想序列化任何东西。我只想返回相当于HttpResponse(blah)

【问题讨论】:

  • 你真正想解决什么问题?

标签: python django rest http django-piston


【解决方案1】:

听起来你想要一个字符串发射器,而不是内置的 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' }),
)

【讨论】:

    【解决方案2】:

    要添加到 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)
    

    【讨论】:

      【解决方案3】:

      在你看来:

      class HttpResponsePlain(django.http.HttpResponse):
      
          def serialize(self):            return self.content
          def serialize_headers(self):    return ''
      
      return HttpResponsePlain(content = 'That is plain text response!')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        • 1970-01-01
        • 2016-03-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多