如何使用cherrypy动态生成图形

3 投票
2 回答
2533 浏览
提问于 2025-04-15 16:09

我正在用cherrypy开发一个小型的网页应用程序,我想从存储在数据库中的数据生成一些图表。网页上显示表格的部分比较简单,我打算用matplotlib来绘制图表。但是,我该怎么设置方法的内容类型,让它返回图片而不是普通文本呢?cherrypy会自动识别结果并更改内容类型吗?

2 个回答

0

你可以改变响应的内容类型:

cherrypy.response.headers['Content-Type'] = "image/png"
6

你需要手动设置响应的内容类型头,这可以在应用程序配置中完成,或者使用 response.headers 工具,或者在处理方法中进行设置。

在处理方法中,有两种选择可以参考 Cherrypy Tools wiki 的 MimeDecorator 页面。

在方法的主体部分:

def hello(self):
    cherrypy.response.headers['Content-Type']= 'image/png'
    return generate_image_data()

或者在 Cherrypy 3 中使用工具装饰器:

@cherrypy.tools.response_headers([('Content-Type', 'image/png')])
def hello(self):
    return generate_image_data()

这个wiki还定义了一个自定义装饰器:

def mimetype(type):
    def decorate(func):
        def wrapper(*args, **kwargs):
            cherrypy.response.headers['Content-Type'] = type
            return func(*args, **kwargs)
        return wrapper
    return decorate

class MyClass:        
    @mimetype("image/png")
    def hello(self):
        return generate_image_data()

撰写回答