Cherrypy和内容类型

时间:2017-02-17 14:58:34

标签: python cherrypy

我有一个樱桃应用程序,我试图更改响应标头内容类型。我尝试使用cherrypy.response.header [' Content-Type'] =' text / plain'来尝试这样做。不幸的是,我仍然得到了#text / html'。我想为ok请求设置一种内容类型,为错误消息设置另一种内容类型。我如何更改内容类型的唯一方法是使用我的装饰器。但是这个方法的集合类型我需要改变它。你知道哪里可能有问题吗? 我的配置:

config = {
    '/': {
        'request.dispatch': cherrypy.dispatch.MethodDispatcher(),
        'tools.response_headers.on': True,
        'tools.response_headers.headers': [('Content-Type', 'text/html')],
    }
}



def GET(self, id):
   cherrypy.response.headers['Content-Type'] = 'application/x-download'
   somecode
   if res < None:
       cherrypy.response.headers['Content-Type'] = 'text/plain'           
       cherrypy.response.status=404

GET._cp_config = {'response.stream': True}

1 个答案:

答案 0 :(得分:0)

def stream():
def decorate(func):
    def wrapper(*args, **kwargs):
        name = time.strftime("%Y%m%d-%H%M%S")
        cherrypy.response.headers['Content-Type'] = 'application/x-download'
        cherrypy.response.headers['Content-Disposition'] = 'attachment; filename="' + name + '.txt"'
        cherrypy.response.headers['Transfer-Encoding'] = 'chunked'
        return func(*args, **kwargs)
    return wrapper
return decorate



  @cherrypy.expose
  class Network:
@stream()
def GET(self, id):
    source = my_generator()
    for i in source:
        if res < None:
            cherrypy.response.headers['Content-Type'] = 'text/plain'           
            cherrypy.response.status=404
            break
        yield bytes(i)

GET._cp_config = {'response.stream': True}

好的,有更复杂的代码,cherrypy的配置在之前的评论中。我有一个生成器,它产生一些数据,这是将文件中的数据流式传输到客户端。我知道,肯定有更好的解决方案。想象一下,在res变量中有保存到db的结果。问题是,这完全忽略了if条件下的设置。它仍然返回一个文件(空文件)。装饰器是如何设置内容类型的唯一方法,这就是为什么它在那里