2016-10-14 5 views
0

Ich möchte ein Django-Projekt auf mehreren Domains/Websites laufen lassen. Die Websites müssen jeweils auf ein eindeutiges "urls.py"/"views.py" zugreifen. Ich habe es bereits mit this tutorial versucht, aber es funktioniert nicht für mich. Gibt es eine Möglichkeit, dies leicht mit Middleware (ohne das Framework Sites) zu tun? Ein bisschen Hilfe wäre wirklich toll. Vielen Dank.mehrere Domains - ein Django-Projekt

Edit: Wie ich es wie im Tutorial von oben versucht, sah meine httpd.conf wie folgt aus:

ServerRoot "/home/webfactionusername/webapps/erdbeer/apache2" 

LoadModule authz_core_module modules/mod_authz_core.so 
LoadModule dir_module  modules/mod_dir.so 
LoadModule env_module  modules/mod_env.so 
LoadModule log_config_module modules/mod_log_config.so 
LoadModule mime_module  modules/mod_mime.so 
LoadModule rewrite_module modules/mod_rewrite.so 
LoadModule setenvif_module modules/mod_setenvif.so 
LoadModule wsgi_module  modules/mod_wsgi.so 
LoadModule unixd_module  modules/mod_unixd.so 

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 
CustomLog /home/webfactionusername/logs/user/access_erdbeer.log combined 
ErrorLog /home/webfactionusername/logs/user/error_erdbeer.log 

Listen 10414 
KeepAlive Off 
SetEnvIf X-Forwarded-SSL on HTTPS=1 
ServerLimit 1 
StartServers 1 
MaxRequestWorkers 5 
MinSpareThreads 1 
MaxSpareThreads 3 
ThreadsPerChild 5 

WSGIDaemonProcess erdbeer processes=2 threads=12 python-path=/home/webfactionusername/webapps/erdbeer:/home/webfactionusername/webapps/erdbeer/myproject:/home/webfactionusername/webapps/erdbeer/lib/python2.7 
WSGIProcessGroup erdbeer 
WSGIRestrictEmbedded On 
WSGILazyInitialization On 
WSGIScriptAlias//home/webfactionusername/webapps/erdbeer/myproject/myproject/wsgi.py 


# Virtual hosts setup 
NameVirtualHost * 
<VirtualHost *> 
    ServerName mydomain123abc.de 

    WSGIDaemonProcess erdbeer processes=5 python-path=/home/webfactionusername/webapps/erdbeer:/home/webfactionusername/webapps/erdbeer/lib/python2.7 threads=1 
    WSGIScriptAlias//home/webfactionusername/webapps/erdbeer/subdomain1.wsgi 
</VirtualHost> 

<VirtualHost *> 
    ServerName seconddomain123.de 

    WSGIDaemonProcess erdbeer processes=5 python-path=/home/webfactionusername/webapps/erdbeer:/home/webfactionusername/webapps/erdbeer/lib/python2.7 threads=1 
    WSGIScriptAlias//home/webfactionusername/webapps/erdbeer/subdomain2.wsgi 
</VirtualHost> 

Edit2: Ich bin nach wie vor nicht in der Lage diese Middleware-Konzept zu begreifen. Ich konnte nur verstehen, dass ich wahrscheinlich "process_request" verwenden muss, aber ich habe keine Ahnung, wie die Middleware-Datei aussehen würde. Lets sagen, dass ich "domain1.com" und "domain2.com" haben, welche diese URLs verwenden soll:

domain1_urls.py

from django.conf.urls import include, url 
from django.contrib import admin 
from django.http import HttpResponse 

urlpatterns = [ 
    url(r'^$', 'myapp1.views.home'), 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^robots\.txt$', lambda r: HttpResponse("User-agent: *\nDisallow:", content_type="text/plain")), 
] 

domains2_urls.py

from django.conf.urls import include, url 
from django.contrib import admin 
from django.http import HttpResponse 

urlpatterns = [ 
    url(r'^$', 'myapp2.views.home'), 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^robots\.txt$', lambda r: HttpResponse("User-agent: *\nDisallow:", content_type="text/plain")), 
] 

Wie würde ich das verwenden in meiner Middleware? (Ich bin ein Anfänger ...)

+1

Es funktioniert. Mai Web-Server conf Probleme.Post Ihre Webserver-Konfiguration – itzMEonTV

+0

Ich habe meinen Beitrag bearbeitet. Ich würde es gerne mit Middleware machen, wenn möglich, weil ich nichts über Apache und solche Sachen weiß. – torbinho

+0

Benötigen Sie unterschiedliche Einstellungen für verschiedene Domains? – itzMEonTV

Antwort

0

Ich fand die Lösung perfectly here.

# File: settings.py 

HOST_MIDDLEWARE_URLCONF_MAP = { 
    # Control Panel 
    "www.example.com": "webapp.sites.example.urls", 
} 

und

# File: multihost.py 

import time 
from django.conf import settings 
from django.utils.cache import patch_vary_headers 

class MultiHostMiddleware: 

    def process_request(self, request): 
     try: 
      request.META["LoadingStart"] = time.time() 
      host = request.META["HTTP_HOST"] 
      #if host[-3:] == ":80": 
      # host = host[:-3] # ignore default port number, if present 

      # best way to do this. 
      host_port = host.split(':') 
      if len(host_port)==2:      
       host = host_port[0] 

      if host in settings.HOST_MIDDLEWARE_URLCONF_MAP: 
       request.urlconf = settings.HOST_MIDDLEWARE_URLCONF_MAP[host] 
       request.META["MultiHost"] = str(request.urlconf) 
      else: 
       request.META["MultiHost"] = str(settings.ROOT_URLCONF) 

     except KeyError: 
      pass # use default urlconf (settings.ROOT_URLCONF) 

    def process_response(self, request, response): 
     if 'MultiHost' in request.META: 
      response['MultiHost'] = request.META.get("MultiHost") 

     if 'LoadingStart' in request.META: 
      _loading_time = time.time() - int(request.META["LoadingStart"]) 
      response['LoadingTime'] = "%.2fs" % (_loading_time,) 

     if getattr(request, "urlconf", None): 
      patch_vary_headers(response, ('Host',)) 
     return response 
+0

sei mir nicht zu hart, ich lerne immer noch. – torbinho

Verwandte Themen