【问题标题】:Implementing a site prefix across all apps在所有应用程序中实现站点前缀
【发布时间】:2010-01-03 20:18:01
【问题描述】:

我正在 Google 的 App Engine 上开发一个应用程序,其中一项功能是通过 Facebook Connect 进行身份验证。我已经完成了所有设置并达到了一定的水平,但是为了在我的开发机器上对其进行测试,我在我的一个面向公众的服务器上创建了一个反向代理,该服务器代理到开发机器。

除了大多数链接没有我为代理创建的前缀之外,一切正常。

这让我开始思考,有没有一种简单的方法可以创建一个站点范围的应用前缀,它不仅适用于我的应用,还适用于我想使用的任何 3 第三方应用?

是否有一些我可以包含的中间件或一些我尚未阅读的 Django 文档?

**更新:**在下面的评论之后,我想到的前缀介于域名和应用程序 url 之间:

http://example.com/PREFIX/myapp/view/

【问题讨论】:

    标签: django django-urls


    【解决方案1】:

    myapp 的 URL 设计为独立的(这样它的 URL 可以“包含”在另一个项目的 URL 中)。

    urlpatterns = patterns ('',
        (r'^$', 'myapp.views.index'),
        (r'^view/$', 'myapp.views.view'),
        ...
    )
    

    请注意,此时您没有将“myapp”放入您的 URL,而只是有一个基本的 URL 方案,可以在部署时指向您想要的任何位置。

    然后,为每个目标部署(例如,测试与生产)创建一个单独的 URLconf 模块,并使用 django.conf.urls.defaults.include function 将 URL 连接到您想要的任意深度的基本 URL:

    from django.conf.urls.defaults import *
    
    urlpatterns = patterns('',
        (r'^PREFIX/myapp/', include('myapp.urls')),
        (r'^PREFIX/myapp2/', include('myapp2.urls')),
        (r'^PREFIX/myapp3/', include('myapp3.urls')),    
    )
    

    指向您的部署 settings.py 以使用此 URLconf 模块,而不是直接指向 myapp 的 URL 模块。

    因为我的测试环境看起来与我的生产环境完全不同,所以我喜欢为每个目标部署设置一个单独的设置模块。

    【讨论】:

    • 谢谢乔,我只需要修补任何我想使用的第三方应用程序,这些应用程序不允许我这样工作。当模板中的链接等不知道我的前缀时,麻烦就来了。
    • 这很好用,如果其他人在反向代理后面使用它,您可以使用 (?:PREFIX/)?使前缀可选,并且在您继续开发时它将在本地响应而没有前缀。
    【解决方案2】:

    如果您的前缀在域名中,为什么不使用根相对 URL?

    我总是使用这种非常方便的网址

    <a href="/myapp/view">blex</a>
    <img src="/static/img/blex.png"/>
    

    希望这会有所帮助。

    【讨论】:

    • 不,前缀需要放在域名和实际应用程序网址之间。以example.com/PREFIX/myapp/view 为例
    • 如何定义一个新的 settings.PREFIX = 'dev' 可以在你的 url 中使用?
    猜你喜欢
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2021-04-28
    • 2015-12-30
    • 2012-06-03
    • 2022-01-18
    • 1970-01-01
    • 2015-11-03
    相关资源
    最近更新 更多