Как заставить URL-маршрутизацию выполняться после StaticMiddleware в web.py - PullRequest
0 голосов
/ 14 января 2012

У меня есть URL-маршрут в моем приложении web.py, который я хочу запустить, чтобы перехватить все URL-адреса, попадающие на сервер, но только после обслуживания любых статических ресурсов.

Например, если есть js/test.js в моем каталоге static, путь http://a.com/js/tests.js должен возвращать содержимое файла.Но у меня также есть моя URL-маршрутизация, настроенная так, что есть регулярное выражение, которое перехватывает все, как это:

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, ноэто может быть не лучшим.

Ответы [ 3 ]

0 голосов
/ 17 января 2012

Я не играл с промежуточным программным обеспечением web.py, но, насколько я понимаю ... Промежуточное программное обеспечение WSGI происходит до того, как web.py увидит запрос / ответ.Я бы подумал, что если ваше WSGI MiddleWare правильно настроено, оно будет работать.

0 голосов
/ 06 февраля 2012

надуты Это отстой.Есть ловушка, которая делает его действительно простым, я не делаю этого раньше, и он увидит все вещи раньше ... документы здесь: http://webpy.org/cookbook/application_processors

но я думаю, что касаетсядругой ваш комментарий: «хочу, чтобы он работал независимо от URL».Откуда вы знаете, что это статический контент в противном случае?Я сильно запутался.Способ EASIEST , поскольку для производства вам нужен какой-то другой веб-сервер, на котором выполняются ваши скрипты web.py, - это отправить весь статический контент на веб-сервер.Тогда вы можете, конечно, делать на веб-сервере все, что вам нужно.Это именно то, что происходит с mod_wsgi и apache, например (вы меняете / static, чтобы указать на каталог IN веб-сервера).

Возможно, если вы поделились реальным примером того, что вам нужносделано, я мог бы помочь тебе больше.В противном случае я дал вам 3 разных способа решения проблемы (исключая использование промежуточного программного обеспечения WSGI).Сколько еще вам нужно?: P

0 голосов
/ 15 января 2012

URL-адрес соответствует python regex . Вы можете тестировать / играть с регулярным выражением Python здесь

Тем не менее, это должно работать для вас:

('/(?!static)(.*)', 'CatchAllHandler')
...