我的web.py应用程序中有一个URL路由,我想运行它来捕获所有到达服务器的URL,但只能在提供任何静态资产之后。
例如,如果我的static
目录中的is是js / test.js,则路径http://a.com/js/tests.js
应该返回文件内容。但我也设置了我的网址路由,以便有一个正则表达式捕获这样的一切:
urls = ('/.*', 'CatchAllHandler')
因此,如果未发现静态资产,则应仅运行 。对http://a.com/js/test.js
的请求应返回静态文件test.js
,但http://a.com/js/nope.js
的请求应该通过CatchAllHandler
。
我已经考虑过编写自己的StaticMiddleware,但只有在web.py操作的顺序发生变化时才会有所帮助。目前,在处理URL路由之后执行中间件。我需要先运行中间件,然后让url路由清理未提供静态资产的请求。
我的一个想法是使用notfound()函数作为我的catch all处理程序,但这可能不是最好的。
答案 0 :(得分:0)
答案 1 :(得分:0)
我没有玩过web.py的中间件,但是我的理解...... WSGI中间件发生在web.py看到请求/响应之前。我想,如果您的WSGI MiddleWare配置正确,它就可以正常工作。
答案 2 :(得分:0)
pouts 太糟糕了。有钩子的东西,这让它变得非常简单,我之前没有那样,它会看到所有的东西..文档在这里:http://webpy.org/cookbook/application_processors
但我猜你的其他评论是“希望无论网址如何都能运作”。你怎么知道它的静态内容呢?我很困惑。 EASIEST 方式,因为对于生产而言,您希望运行web.py脚本的其他Web服务器将所有静态内容推送到Web服务器。那么你当然可以在需要做的Web服务器中做任何你想做的事情。这正是mod_wsgi和apache所发生的情况(您将/ static更改为指向 IN 目录的Web服务器)。
也许如果你分享了你需要做的实际例子,我可以帮助你更多。否则我现在给你3种不同的方法来处理这个问题(不包括使用WSGI中间件)。你还需要多少? :P