我有一个cherrypy应用程序,我正在尝试更改响应头内容类型。我正在尝试使用cherrypy.response.header‘’Content Type‘= 'text/plain’来做到这一点。不幸的是,我仍然收到'text/html‘。我想为ok请求设置一个内容类型,为错误消息设置另一个内容类型。更改内容类型的唯一方法是使用我的装饰器。但是这个方法的set类型,我需要修改它。你知道哪里会出问题吗?我的配置:
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}发布于 2017-02-20 22:11:36
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条件中的设置。它仍然返回一个文件(空文件)。装饰器是设置内容类型的唯一方法,这就是它存在的原因
https://stackoverflow.com/questions/42300991
复制相似问题