首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cherrypy和content-type

Cherrypy和content-type
EN

Stack Overflow用户
提问于 2017-02-17 22:58:34
回答 1查看 2.9K关注 0票数 1

我有一个cherrypy应用程序,我正在尝试更改响应头内容类型。我正在尝试使用cherrypy.response.header‘’Content Type‘= 'text/plain’来做到这一点。不幸的是,我仍然收到'text/html‘。我想为ok请求设置一个内容类型,为错误消息设置另一个内容类型。更改内容类型的唯一方法是使用我的装饰器。但是这个方法的set类型,我需要修改它。你知道哪里会出问题吗?我的配置:

代码语言:javascript
复制
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}
EN

回答 1

Stack Overflow用户

发布于 2017-02-20 22:11:36

代码语言:javascript
复制
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条件中的设置。它仍然返回一个文件(空文件)。装饰器是设置内容类型的唯一方法,这就是它存在的原因

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42300991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档