【问题标题】:Django: how can I automatically generate and cache my urls.py?Django:如何自动生成和缓存我的 urls.py?
【发布时间】:2013-08-07 07:43:17
【问题描述】:

我的项目的 URL 是使用 for 循环在 urls.py 中自动生成的(这些 URL 看起来像 AppName/ViewName)。根据docs,每次请求都会加载 urls.py。这似乎正在减慢我的网站速度,因为它需要一堆自省代码,所以我想减少生成 URL 的频率。我当然可以根据需要手动运行脚本来重新生成 urls.py(或由 urls.py 导入的文件),但如果它作为项目验证/启动的一部分自动发生(如服务器启动或正在同步的数据库)。我正在开源这个项目,很多人会在他们自己的服务器上运行它,所以我想以一种健壮的方式来做这件事。有什么建议吗?

【问题讨论】:

  • 网址多久更改一次?如果不经常发生,即如果 url 不是基于数据库内容生成的,我认为将其保留为一个可以手动按需运行的实用程序是有意义的。
  • @WadeWilliams:他们不会经常改变,只是当有人创建一个新的应用程序或视图功能时。

标签: python django caching django-urls


【解决方案1】:

文档没有说明您声称他们做了什么(或者更确切地说,您对仅表示“加载该 Python 模块(如果尚未加载)”的短语的解读过多。

通常,每个请求都会发生的唯一事情是运行中间件以及与该请求关联的特定视图代码。即便如此,每次请求都不会重新加载任何内容。与所有 Python 代码一样,URL 仅在新进程启动时加载,何时发生取决于您的服务器设置。您的问题在其他地方:您应该仔细分析您的应用程序以找出确切的位置。

【讨论】:

    【解决方案2】:

    例如,您可以查找 django-json-rpc,其中作者已通过装饰器实现了 url-generating。有主控制器接收所有请求和 url dict {'pattern': method}。 urls dict 由 @jsonrpc_method 之类的装饰器自动填充,它们接收一个函数并将它们放入 url。
    我认为它必须比for运行得更快,并且我相信这种方法将能够申请django.urls

    【讨论】:

      猜你喜欢
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 2021-10-03
      • 2022-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多