给用户自定义url来查看使用web.py的可视化报告



我有一个使用web.py设计的轻量级页面——其中它接受用户的输入,有一个在框架中执行的python脚本——并使用matplotlib生成一些图像。然后我把所有的图像转储到s3 -并发送电子邮件给用户(与报告的位置)谁发起会话/表单填写-我想做的是也给用户一个有点像自定义url得到附加如下,http://0.0.0.0:8080静态/my_unique_custom_url_timestamped.png

当我查看web.py框架时,看起来我需要预定义所有的url

  1. 假设我有5个。png文件,我将其转换为一个格式良好的html页面-我可以与用户共享一个自定义url,在那里他们可以直观地查看图表/报告-我如何将此传达回web.py ?
  2. 是否有必要将所有图像存储到"静态"目录,或者我可以在tmp目录中创建引用所有这些图像的html,并共享此html。

我还使用jquery/javascript来构建表单的一部分-我可以使用js来扩展它,尽管我更喜欢python的方式。

幸运的是,web.py的"预定义" url包含正则表达式模式。

一般有两种方法:

  1. 使用单个URL,但发送您唯一的时间戳png作为查询字符串的一部分。你的URL可能是/images?name=my_unique_custom_url_timestamped.png。web.py URL将简单地预定义为'/images',并在该URL的处理程序类中,调用web.input().name来获得所请求的文件名。

    class MyImageHander(object):
        def GET(self):
             png_name = web.input().name
             ...
    
  2. 或者,使用/images/my_unique_custom_url_timestamped.png这样的URL,使用正则表达式'/images/([^/]+.png)'定义web.py URL。注意regex如何捕获前导/images/之后的所有内容。web.py将这个捕获的值传递给处理URL的类的GET方法。

    class MyImageHandler(object):
         def GET(self, png_name):
             ...
    

无论哪种方式,web.py URL都是预定义的。

需要注意的是,如果您正在接受用户输入,并打算从文件系统中抓取某些内容,请确保安全:您不希望用户能够说出/images?name=../../../etc/password,而您盲目地将城堡的钥匙交给他。

最新更新