Domanda

Ho due siti strettamente correlati, un sito principale e un sito mobile, ospitato come un app Django. Avranno un sacco di le stesse funzionalità e necessità di accedere agli stessi dati. La differenza principale è i modelli saranno diverse e il modo in cui il sito è strutturato sarà diverso.

ho due host virtuali separati, uno per ogni (anche se non c'è bisogno di farlo in quel modo). Il mio primo pensiero è stato che il quadro siti Django aiuta a risolvere questo problema, ma la documentazione non sembrano descrivere il mio caso d'uso.

Qualcuno può darmi un suggerimento per sapere se sono sulla strada giusta? L'urls.py dovrà essere diversa poiché, ad esempio, la home page è completamente diverso tra le applicazioni. L'obiettivo principale è che per i dati nelle due applicazioni diverse da condividere e il codice per la gestione che non ha bisogno di essere duplicato.

Dal sito principale:

  • utente invia un elemento che viene memorizzato nel modello

Dal sito mobile:

  • utente visualizza un elenco di voci e vedere quello appena entrato sul sito principale
  • l'utente dà un 5 stelle sulla voce recentemente aggiunto

Dal sito principale:

  • utente visualizza un elenco di voci di prim'ordine e l'elemento aggiunto di recente (che ora ha un rating elevato) si presenta nella lista.
È stato utile?

Soluzione 2

OK, entrambe le risposte sono grandi e hanno contribuito a quello che ho scelto per la mia soluzione finale.

Nel file settings.py c'è un'opzione chiamata ROOT_URLCONF. Ho creato due file settings.py, chiamato settings_desktop.py e settings_mobile.py e in ciascuno di essi usato il seguente codice:

from settings.py import *

ROOT_URLCONF = 'myapp.urls_mobile'

(o, nel caso del desktop, myapp.urls_desktop)

Questo dà realtà un sacco di caratteristiche fredde come la possibilità di utilizzare diverse directory dei modelli per ogni sito, anche se in realtà non ho intenzione di farlo.

Poi ho creato due versioni del file WSGI dove l'unica differenza era questa linea:

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

o

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

In ognuno degli host virtuali l'unica differenza è il WSGIScriptAlias ??linea che punti al diverso file di WSGI per ogni host.

Questo mi ha permesso di utilizzare efficacemente un Django app che poteva ospitare facilmente entrambi i siti.

Grazie per l'aiuto lavoro fuori una buona soluzione a questo.

Altri suggerimenti

Date un'occhiata a questa risposta a una domanda simile . In pratica si può semplicemente utilizzare gli stessi punti di vista e solo tornare modelli diversi in base alla user-agent. Inoltre, se si struttura la logica dell'applicazione in modo che sia suddiviso in diversi "apps" in Django termini, allora si può riutilizzare se avete bisogno di flussi diversi con componenti simili. Speriamo che questo si ottiene fuori e in esecuzione.

UPDATE:

Allora supponiamo di avere il vostro sito principale http://www.mainsite.com/ che ha il proprio models.py urls.py e views.py che rende la funzionalità per il sito principale. Poi devi http://www.m.mainsite.com/ che ha il proprio set di gli URL, e punti di vista. Poi si può semplicemente importare modelli del sito principale e utilizzarli nei siti viste mobili.

Ho fatto qualcosa di molto simile, una volta. Il mio modo di risolvere questo problema di urls.py multipla era qualcosa di simile a questo:

Crea due urlconf, uno per ogni sito;

Crea un nuovo 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

Controlla anche il motivo per cui si deve fare i patch_vary_headers sul docs .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top