Несколько сайтов в рамках одного проекта Django - PullRequest
5 голосов
/ 30 июля 2010

Возможно и правильно ли иметь несколько сайтов под одним проектом django. Таким образом, будет глобальный общий файл заседаний, URL-файлы и глобальные общие «приложения» для всех сайтов, а также общий интерфейс администратора для всех сайтов в рамках одного проекта django. Каждый сайт может иметь свои собственные настройки, URL-адреса и шаблоны, которые будут переопределены или динамически импортированы в родительский файл настроек.

Может кто-нибудь сказать, пожалуйста, как этого добиться, используя Python2.6 + Django 1.2.1 + Apache2.2 + mod_wsgi. Поскольку я немного запутался с виртуальным хостом, который нужно указывать при использовании mod_wsgi.

В соответствии с вышеуказанным требованием я планирую сохранить файл wsgi в главной директории проекта django, чтобы основные настройки были импортированы, а в рамках основной настройки я планирую динамически импортировать запрошенные настройки сайтов. Возможно ли это способ с помощью Apache + mod_wsgi. Пожалуйста, совет.

ИЛИ

Вместо глобального проекта django мне нужно создать глобально распространяемый модуль для импорта глобальных настроек и URL-адресов в специфичные для сайта настройки и URL-адреса.

Я хотел бы улучшить повторное использование кода, а не вносить избыточные изменения на каждом сайте.

Пожалуйста, совет.

Ответы [ 2 ]

8 голосов
/ 23 октября 2012

Это то же самое, что и я. Я позаимствовал у http://michal.karzynski.pl/blog/2010/10/19/run-multiple-websites-one-django-project/

По сути, вы создадите запись виртуального хоста в файле http.conf для каждого домена.

# Virtual hosts setup
NameVirtualHost *
<VirtualHost *>
    ServerName example1.com

    WSGIDaemonProcess APPLICATION_NAME processes=5 python-path=/home/USERNAME/webapps/APPLICATION_NAME:/home/USERNAME/webapps/APPLICATION_NAME/lib/python2.6 threads=1
    WSGIScriptAlias / /home/USERNAME/webapps/APPLICATION_NAME/domain1.wsgi
</VirtualHost>

<VirtualHost *>
    ServerName example2.com


    WSGIDaemonProcess APPLICATION_NAME_www processes=5 python-path=/home/USERNAME/webapps/APPLICATION_NAME:/home/USERNAME/webapps/APPLICATION_NAME/lib/python2.6 threads=1
    WSGIScriptAlias / /home/USERNAME/webapps/APPLICATION_NAME/domain2.wsgi
</VirtualHost>

Затем вы захотите создать два разных файла wsgi для каждого домена и поместить их в каталог, в котором находится ваш проект. WSGIScriptAlias ​​- это путь к файлу wsgi, поэтому убедитесь, что они совпадают ...

Пример файла Wsgi:

import os
import sys
from django.core.handlers.wsgi import WSGIHandler

os.environ['DJANGO_SETTINGS_MODULE'] = 'PROJECT_NAME.domain1_settings' # or PROJECT_NAME.domain2_settings
application = WSGIHandler()

Тогда вы захотите создать два дополнительных файла настроек ... так что у вас будет

settings.py
domain1_settings.py
domain2_settings.py

domain1_settings.py и domain2_settings.py будут импортировать settings.py:

пример domain1_settings.py:

from settings import *

SITE_ID = 1

ROOT_URLCONF = 'domain1_urls'

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',

# other apps specific to this domain
)

Наконец, вы захотите создать два отдельных файла urls ..

domain1_urls.py и domain2_urls.py

domain1_urls.py будет использоваться по умолчанию для site_id 1, а domain2_urls.py будет использоваться по умолчанию для site_id 2.

4 голосов
/ 30 июля 2010

Да, это вполне возможно. Сайты могут даже обмениваться данными.

Фреймворк sites позволяет это - документацию см. Здесь:

https://docs.djangoproject.com/en/1.11/ref/contrib/sites/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...