![](/img/trans.png)
[英]Is it possible to use the Django Sites Framework with multiple Sites on the same instance?
[英]"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 實例上運行站點的多個副本。
基本思想是為每個請求即時更改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 重復自己。
您至少可以嘗試從單個實例提供兩種方法:
使用 apache + mod_wsgi並使用WSGIApplicationGroup和/或WSGIProcessGroup指令。 我以前從來不需要這些,所以不能完全確定它們會按您想要的方式工作,但無論如何您絕對可以在守護進程模式下使用 mod_wsgi 來大大改善您的 memory 占用空間。
您可以使用 Django 中間件來根據請求主機名拒絕/允許 URL(請參閱 Django 文檔中的HttpRequest.get_host() )。 就此而言,即使這會對性能造成輕微影響,您也可以在所有視圖上放置一個裝飾器來檢查傳入的主機。
僅供參考 - 我發布了 django-dynamicsites 可以幫助解決這個問題 - https://bitbucket.org/uysrc/django-dynamicsites/src
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.