我有一个樱桃应用程序,我试图更改响应标头内容类型。我尝试使用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}
答案 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条件下的设置。它仍然返回一个文件(空文件)。装饰器是如何设置内容类型的唯一方法,这就是为什么它在那里