簡體   English   中英

單個 django 實例上的“站點框架”

[英]"sites framework" on a single django instance

我想在與網站 rest 不同的子域上提供專門的 RSS 提要。

我可以使用站點框架在單個 django 實例中使用不同的 urls.py 和 settings.py 文件嗎? 還是我需要設置兩個 apache 位置並在 apache conf 中設置不同的 settings.py 文件。

我需要設置兩個 urls.py 文件的原因是為了避免重復的內容。 我不希望主站點在 rss.example.com 上可用,也不希望在 example.com 上訪問專門的提要

從單個 django 實例為它們提供服務將是理想的,因為我們在有限的 memory 共享主機上,打開一個只提供 rss 的實例似乎是一種浪費。

編輯:我得出結論,具有單獨 urls.py 文件的多個實例對我來說是最簡單的......但我發現這篇文章描述了如何使用單個實例來做到這一點:

http://effbot.org/zone/django-multihost.htm

解決方案: Django 特百惠

我最終編寫了一個框架,用於在單個 django 實例上運行站點的多個副本。

基本思想是為每個請求即時更改SITE_ID設置並從數據庫加載備用設置。 它基於域執行此操作並默認使用SITE_ID = 1 (當它找不到任何東西時)

settings.py 文件中的所有設置都作為默認設置,它們被存儲在當前站點數據庫中的設置覆蓋。

它工作得很好:)並且它在生產中運行在http://rootbuzz.com

對於 stock Django,您必須為每個站點設置一個唯一的settings.py ... 因為 SITE_ID 是在settings.py中定義的,並且是處理此請求的站點的關鍵。

換句話說,SITE_ID 對於您的實例是全局的,因此您需要為每個站點創建一個實例。

如果你願意,你可以有一個通用的urls.py ,因為沒有什么可以阻止你在所有站點settings.py文件中使用相同的 ROOT_URLCONF ......或者你可以為每個站點使用不同的ROOT_URLCONF 在這種情況下,您可能希望包含子 URL 以防止對任何常見 URL 重復自己。

您至少可以嘗試從單個實例提供兩種方法:

  1. 使用 apache + mod_wsgi並使用WSGIApplicationGroup和/或WSGIProcessGroup指令。 我以前從來不需要這些,所以不能完全確定它們會按您想要的方式工作,但無論如何您絕對可以在守護進程模式下使用 mod_wsgi 來大大改善您的 memory 占用空間。

  2. 您可以使用 Django 中間件來根據請求主機名拒絕/允許 URL(請參閱 Django 文檔中的HttpRequest.get_host() )。 就此而言,即使這會對性能造成輕微影響,您也可以在所有視圖上放置一個裝飾器來檢查傳入的主機。

僅供參考 - 我發布了 django-dynamicsites 可以幫助解決這個問題 - https://bitbucket.org/uysrc/django-dynamicsites/src

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM