Создание 2 сайтов Django, которые разделяют 90% данных и код

StackOverflow https://stackoverflow.com/questions/4619226

  •  30-09-2019
  •  | 
  •  

Вопрос

У меня есть два тесно связанных сайта, главный сайт и мобильный сайт, размещенный в качестве приложения Django. У них будет много той же функциональности и необходимо получить доступ к тому же данным. Основным отличием являются шаблоны будут разными, а как структурирован сайт будет другим.

У меня есть два отдельных виртуальных хоста, один для каждого (хотя мне не нужно это делать). Моя первая мысль заключалась в том, что структура сайтов Django помогает решить это, но, похоже, документы не описывают моего случая использования.

Может кто-нибудь дать мне подсказку знать, если я на правильном пути? URLS.PY нужно будет отличаться поскольку, например, домашняя страница полностью отличается между приложениями. Основная цель состоит в том, что для данных в двух разных приложениях будут разделены и код для управления, которые не нужно дублироваться.

С главного сайта:

  • Пользователь подает элемент, который хранится в модели

С мобильного сайта:

  • Пользователь представлен список элементов и посмотреть, что только введен на главный сайт
  • Пользователь дает 5-звездочный рейтинг на недавно добавленном элементе

С главного сайта:

  • Пользователь представлен список высоко оцененных элементов и недавно добавленный элемент (который теперь имеет высокий рейтинг), отображается в списке.
Это было полезно?

Решение 2

Хорошо, оба ответа великолепны и способствуют тому, что я выбрал для моего заключительного решения.

В файле settings.py есть опция, называемая root_urlconf. Я создал два файла settings.py, называемые settings_desktop.py и settings_mobile.py и в каждом из них использовали следующий код:

from settings.py import *

ROOT_URLCONF = 'myapp.urls_mobile'

(или в случае рабочего стола, myapp.urls_desktop)

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

Затем я создал две версии файла WSGI, где только разница была в этой строке:

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings_mobile'

или

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings_desktop'

В каждом из виртуальных хостов только разница - это линия WSGiscriptalias, которая указывает на другой файл WSGI для каждого хоста.

Это позволило мне эффективно использовать одно приложение Django, которое может легко вместить оба сайта.

Спасибо, что помогли поработать хорошее решение этого.

Другие советы

Посмотри на Этот ответ на аналогичный вопрос. Отказ В основном вы можете просто использовать такие же представления и просто вернуть разные шаблоны на основе пользовательского агента. Кроме того, если вы структурируете логику приложения, чтобы она разбита в разные «приложения» в терминах Django, вы можете повторно использовать их, если вам нужны разные потоки с аналогичными компонентами. Надеюсь, это уводит вас и бежать.

ОБНОВИТЬ:

Итак, давайте скажем, у вас есть ваш главный сайт http://www.mainsite.com/ Кто имеет свои собственные URLS.PY MODITS.PY и Views.py, что делает вашу функциональность для основного сайта. Тогда у вас есть http://www.m.mainsite.com/ который имеет свой набор URL, и взгляды. Тогда вы можете просто импортировать модели основных сайтов и использовать их на видах мобильных сайтов.

Я сделал что-то очень похожее. Мой способ решения этой проблемы множества URLS.PY было что-то подобное:

Создайте два URLCONF, один для каждого сайта;

Создать новое промежуточное программное обеспечение:

from django.utils.cache import patch_vary_headers

class DomainMiddleware:

    def __init__(self):
        pass

    def process_request(self, request):

        #avoid problems when reaching the server directly trough IP
        host = request.META.get('HTTP_HOST', None)
        if host is None: return

        host = host.split(':')[0] #remove port number

        if host is mobile:
            urlconf = "mobile.urls"
        else:
            urlconf = "default.urls"

        request.urlconf = urlconf

    def process_response(self, request, response):
        patch_vary_headers(response, ('Host',))
        return response

Проверьте, почему вы должны сделать papt_vary_headers на документах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top