【问题标题】:Passing around urls between applications in the same project在同一项目中的应用程序之间传递 url
【发布时间】:2010-09-12 13:15:59
【问题描述】:

我正在尝试模拟一个 API,并在 Django 中使用单独的应用程序来表示不同的 Web 服务。我希望 App A 接收与 App B 对应的链接并解析 json 响应。

有没有办法动态构造 App B 的 url,以便我可以在开发中测试代码,并且在投入生产之前不会做太多改动?问题是我不能使用 localhost 作为链接的一部分。

我目前正在使用 urllib,但最终我想做一些不那么老套的事情,更好地适应网络服务 REST 范式。

【问题讨论】:

    标签: python django web-services development-environment


    【解决方案1】:

    你可以这样做

    if settings.DEBUG:
      other = "localhost"
    else:
      other = "somehost"
    

    并使用 other 来构建外部 URL。通常,您在 DEBUG 模式下编码并在非 DEBUG 模式下部署。 settings.DEBUG 是一个“标准”的 Django 东西。

    【讨论】:

    • platform.node() 对此也非常有用(平台模块是标准库的一部分)。
    【解决方案2】:

    “Django 中的独立应用程序”是指具有共同设置的独立应用程序吗?也就是说,同一个Django站点(或项目)内的两个应用程序?

    如果是这样,{% url %} 标签将为设置文件中列出的任何应用生成正确的绝对 URL。

    如果有单独的 Django 服务器具有单独的设置,那么您就会遇到 URI 设计的标准 Internet 问题。您的 URI 只能与更改的主机名保持一致。

    - http://localhost/some/path - development
    
    - http://123.45.67.78/some/path - someone's laptop who's running a server for testing
    
    - http://qa.mysite.com/some/path - QA
    
    - http://www.mysite.com/some/path - production
    

    您永远不需要提供主机信息,因此您所有的链接都是<A HREF="/some/path/">

    这通常是最好的。您可以将某人的随机笔记本电脑用作测试服务器;您可以使用 ifconfig 获取 IP 地址。

    【讨论】:

    • 如何在模板以外的地方使用 {% url %} 功能?
    • 您还可以使用 django.core.urlresolvers.reverse(查看文档)获取任何 URL,而不仅仅是模型的绝对 URL。
    猜你喜欢
    • 2020-03-09
    • 1970-01-01
    • 2021-11-28
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多