Question

J'ai deux sites étroitement liés, un site principal et un site mobile, hébergés sous forme d'application Django.Ils auront en grande partie les mêmes fonctionnalités et devront accéder aux mêmes données.La principale différence est que les modèles seront différents et la façon dont le site est structuré sera différente.

J'ai deux hôtes virtuels distincts, un pour chacun (même si je n'ai pas à le faire de cette façon).Ma première pensée a été que le framework des sites Django aide à résoudre ce problème, mais la documentation ne semble pas décrire mon cas d'utilisation.

Quelqu'un peut-il me donner un indice pour savoir si je suis sur la bonne voie ?Le urls.py devra être différent puisque, par exemple, la page d'accueil est complètement différente entre les applications.L'objectif principal est que les données des deux applications différentes soient partagées et que le code à gérer n'ait pas besoin d'être dupliqué.

Depuis le site principal :

  • L'utilisateur soumet un élément stocké dans le modèle

Depuis le site mobile :

  • L'utilisateur consulte une liste d'éléments et voit celui qui vient d'être saisi sur le site principal
  • L'utilisateur donne une note de 5 étoiles à l'élément récemment ajouté

Depuis le site principal :

  • L'utilisateur affiche une liste d'éléments très bien notés et l'élément récemment ajouté (qui a désormais une note élevée) apparaît dans la liste.
Était-ce utile?

La solution 2

OK, les deux réponses sont excellentes et ont contribué à ce que j'ai choisi pour ma solution finale.

Dans le fichier settings.py, il existe une option appelée ROOT_URLCONF.J'ai créé deux fichiers settings.py, appelés settings_desktop.py et settings_mobile.py et dans chacun d'eux, j'ai utilisé le code suivant :

from settings.py import *

ROOT_URLCONF = 'myapp.urls_mobile'

(ou dans le cas du bureau, myapp.urls_desktop)

Cela donne en fait de nombreuses fonctionnalités intéressantes, telles que la possibilité d'utiliser différents répertoires de modèles pour chaque site, même si je ne vais vraiment pas le faire.

Ensuite j'ai créé deux versions du fichier wsgi où la seule différence était cette ligne :

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

ou

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

Dans chacun des hôtes virtuels, la seule différence est la ligne WSGIScriptAlias ​​qui pointe vers le fichier wsgi différent pour chaque hôte.

Cela m'a permis d'utiliser efficacement une application Django pouvant facilement accueillir les deux sites.

Merci d'avoir aidé à trouver une bonne solution à ce problème.

Autres conseils

Jetez un oeil à cette réponse à une question similaire. Fondamentalement, vous pouvez simplement utiliser les mêmes vues et juste revenir différents modèles basés sur l'agent utilisateur. En outre, si vous structurez votre logique d'application de sorte qu'il est divisé en différents « apps » dans django termes, vous pouvez les réutiliser si vous avez besoin de différents flux avec des composants similaires. Espérons que cela vous kiffe et en cours d'exécution.

Mise à jour:

permet de dire que vous avez votre site principal http://www.mainsite.com/ qui a il est propre urls.py models.py et views.py qui rend votre fonctionnalité pour le site principal. Ensuite, vous avez http://www.m.mainsite.com/ qui a son propre ensemble de urls et vues. Ensuite, vous pouvez simplement importer les modèles du site principal et les utiliser dans les vues des sites mobiles.

Je l'ai fait quelque chose de très similaire une fois. Ma façon de résoudre ce problème de multiples urls.py était quelque chose comme ceci:

Créer deux URLconf, un pour chaque site;

Créer un nouveau Middleware:

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

Vérifiez aussi pourquoi vous devez faire les patch_vary_headers sur la docs .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top