Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mod_python发布器和漂亮的url_Python_Url_Mod Python_Friendly Url - Fatal编程技术网

mod_python发布器和漂亮的url

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。。可通

我是Python新手(我离开PHP是因为它越来越破烂),我正在加速移植我的旧代码。有一件事:

我有一个文件/foo.py,其中包含函数index()和bar(),因此,我可以通过发布服务器访问,正如文档所示

我怎样才能做到:

这样发布者启动bar(),然后我可以访问URL以获取/a1/a2/。。。 我所得到的一切都是被禁止的:)(我不想在所有事情上都使用mod_重写)

哦,我在2.5.2上 提前谢谢

更新:理想的解决方案是发布者在URL中启动最右边的分辨率,并简单地制作a1/a2/a3。。可通过apache模块访问。可能是apache指令和发布服务器的组合

已解决(ish):
神奇的调用()方法等的答案非常有趣!尽管我认为我将修改发布服务器或编写自己的发布服务器,以类似的方式使用最右端匹配检查对象,然后允许最右端使用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-我知道,虽然我并不认为出版商已经破产,只是不知道它是否实现了类似的解析机制,我找不到它!