Я новичок в Python (я выхожу из PHP из-за того, что все больше и больше нарушается), и я бегу через портирование моего старого кода. Одна вещь:
У меня есть файл /foo.py с функциями index() и bar(), поэтому с издателем я могу получить доступ к http://domain/foo/bar и http://domain/foo, как предполагает документация.
Как я могу это сделать, чтобы я мог:
http://domain/foo/bar/a1/a2/a3/an/...
Так, что издатель запускает bar(), а затем я могу получить доступ к URL-адресу для получения /a 1/a2/... Все, что я получаю, это Запрещено:) (я не хочу использовать mod_rewrite во всем)
О, im на 2.5.2 Спасибо заранее
ОБНОВЛЕНИЕ: Идеальное решение для издателя должно было бы обеспечить самое правильное разрешение в URL-адресе, которое оно может, и просто сделать a1/a2/a3.. доступным через модуль apache. Может быть, комбинация директивы apache и издателя?
SOLVED (ish): Ответ магии вызов() метод и так далее является сочным! Хотя я думаю, что я изменю издателя или напишу свой собственный, чтобы проверять объекты аналогичным образом с использованием наиболее подходящего соответствия, а затем позволяя наиболее правому право доступа к URL-адресу с помощью модуля apache. Спасибо всем!
У вас должен быть объект bar.a1.a2.a3.an
, определенный в вашем модуле foo.py
. В основном обработчик издателя заменяет косые черты в URL-адресе точками и пытается найти некоторый объект Python с этим именем.
У вас должен быть объект bar.a1.a2.a3.an
, определенный в вашем модуле foo.py
. В основном обработчик издателя заменяет косые черты в URL-адресе точками и пытается найти некоторый объект Python с этим именем.
Здесь что-то неловкое вы можете попробовать: в foo.py
:
class _barclass(object):
def __init__(self, parent, name):
if parent and name:
self.path = parent.path + '/' + name
setattr(parent, name, self)
else:
self.path = ''
def __getattr__(self, name):
return _barclass(self, name)
def __call__(self):
# do your processing here
# url path is contained in self.path
bar = _barclass(None, None)
Хотя это как бы напрягает границы того, что должен делать издатель, вам лучше писать свои собственные обработчики с нуля. (Или используя что-то вроде Django.)
Я считаю, что, насколько мне известно, это выходит за рамки возможностей алгоритма публикации. (Документация, конечно, не упоминает об этом.) Вы можете написать свой собственный обработчик mod_python (пример здесь), который расширяет алгоритм публикации, чтобы сделать это, однако.
Лучшим решением было бы изучить mod_wsgi и создать ваше веб-приложение как приложение WSGI. Вы могли бы воспользоваться полками и полками промежуточного программного обеспечения WSGI, но, в частности, вы могли бы использовать программное обеспечение маршрутизации, например Routes, которое специально разработаны для обработки этих случаев, когда публикация объектов недостаточно сильна. Но я не знаю ваших крайних сроков, поэтому это может быть или не быть осуществимым.