mod_python发布器和漂亮的url
我是Python新手(我离开PHP是因为它越来越破烂),我正在加速移植我的旧代码。有一件事: 我有一个文件/foo.py,其中包含函数index()和bar(),因此,我可以通过发布服务器访问,正如文档所示 我怎样才能做到: 这样发布者启动bar(),然后我可以访问URL以获取/a1/a2/。。。 我所得到的一切都是被禁止的:)(我不想在所有事情上都使用mod_重写) 哦,我在2.5.2上 提前谢谢 更新:理想的解决方案是发布者在URL中启动最右边的分辨率,并简单地制作a1/a2/a3。。可通过apache模块访问。可能是apache指令和发布服务器的组合 已解决(ish):mod_python发布器和漂亮的url,python,url,mod-python,friendly-url,Python,Url,Mod Python,Friendly Url,我是Python新手(我离开PHP是因为它越来越破烂),我正在加速移植我的旧代码。有一件事: 我有一个文件/foo.py,其中包含函数index()和bar(),因此,我可以通过发布服务器访问,正如文档所示 我怎样才能做到: 这样发布者启动bar(),然后我可以访问URL以获取/a1/a2/。。。 我所得到的一切都是被禁止的:)(我不想在所有事情上都使用mod_重写) 哦,我在2.5.2上 提前谢谢 更新:理想的解决方案是发布者在URL中启动最右边的分辨率,并简单地制作a1/a2/a3。。可通
神奇的调用()方法等的答案非常有趣!尽管我认为我将修改发布服务器或编写自己的发布服务器,以类似的方式使用最右端匹配检查对象,然后允许最右端使用apache模块访问URL。谢谢大家 您必须在
foo.py
模块中定义一个对象bar.a1.a2.a3.an
。基本上,发布者处理程序将URL中的斜杠替换为点,并尝试查找具有该名称的Python对象
您必须在
foo.py
模块中定义一个对象bar.a1.a2.a3.an
。基本上,发布者处理程序将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处理程序()来扩展发布算法
更好的解决方案是将您的web应用程序作为一个应用程序进行研究和构建。您将受益于WSGI中间件的架子和架子,但特别是您能够使用路由软件,如,专门设计用于处理对象发布不够强大的情况。但我不知道您的截止日期,所以这可能可行,也可能不可行。这将是一个头疼的问题,因为a1、a2、a3组件可能是数据库中的标签:foo/articles/may/2009/latest for articles()将数据库信息和约束“latest”混合在一起,将所有这些编码到对象嵌套中会很糟糕:)无论如何,谢谢!:)我没有,神奇的方法似乎更适合我的街道你得到我的绿色!我应该想到这一点,不习惯跳转到对象的动态性(尽管PHP非常支持它),我基本上是一个C语言人!谢谢,我知道你的意思,Python有很多技巧需要一些时间才能习惯。(我已经做了一年半了。)6个小时:(,虽然一旦整个空白交易变得舒适,我会很高兴看到PHP的背面。现在,尽管我想要回我的大括号:)谢谢郝莲:我认为比publisher更大的应用程序框架或中间件是过火了。在PHP中,我简单地分解了$\u服务器[url\u key\u thing],我发现/foo/bar/a/b/c不存在,但/foo/bar存在(作为文件),并运行了它。也许有一个Apache指令?@NewToPython:听起来你在考虑PATH_INFO-你也可以在Python中使用它,但是在publisher处理程序中。Mod_Python的实现实际上相当庞大。您可能会发现WSGI+路由(或其他东西)实际上可能更快、更轻。我要指出,url爆炸方法,使用Apache“刚刚运行”生成的文件代表了PHP文化的一个基本方面,这让您认为它已经崩溃:-)@Jarret-我知道,虽然我并不认为出版商已经破产,只是不知道它是否实现了类似的解析机制,我找不到它!