django 多域名多app 问题 --django-host

来源:互联网 发布:淘宝网推广方法ppt 编辑:程序博客网 时间:2024/04/30 04:37

场景

我们使用django 开发网站,一个项目下需要两个app,比如一个是天气预报,一个是交通。我们分别起名为weather_app,traffic_app。

如果使用一个域名,如www.test.com/weather 和www.test.com/traffic
这样不会引入是什么问题,直接使用django的urls解析没有问题。

但是如果想要专业点,使用weather.test.com对应 weather_app。traffic.test.com 对应 traffic_app 。如何实现呢

安装

我们这里可以安装这个插件 django-host

github地址 :https://github.com/jazzband/django-hosts

pip install django-host

配置

这里要提前说明下,我的部署环境是centos7下 nginx + uwsgi + django

多站点部署的前提是,你要对nginx uwsgi 已经有所了解,这样方便你理解我们在做什么。

1.添加'django_hosts'到 项目的settings 文件 INSTALLED_APP中;2.添加'django_hosts.middleware.HostsRequestMiddleware'到项目的settings 文件 MIDDLEWARE 中的开始位置;3.添加'django_hosts.middleware.HostsRequestMiddleware'到项目的settings 文件 MIDDLEWARE 中的结束位置;(就是前后都要放)4.在settings.py 所在的文件夹创建一个名叫host.py 的文件,写入下面的内容。
from django_hosts import patterns, host #导入django-hostfrom django.conf import settings        #导入settingsfrom ss_update import views #导入app1,我的app1叫ss_updatefrom translate import views #导入app2,我的app2叫translatehost_patterns = patterns('',    host(r'www', 'ss_update.urls', name='www'),      #子域名,类似weather.test.com中的weather    host(r'translate', 'translate.urls', name='translate'), #子域名,类似translate.test.com 中的translate)
5.在settings.py中,在ROOT_URLCONF之后增加  ROOT_HOSTCONF = '项目文件夹名.host' #不是app名6.在settings.py中,在ROOT_HOSTCONF之后增加DEFAULT_HOST='www' #这里在未匹配到正确的二级域名时,默认选择一个,默认的必须是你在host.py中设置的。否则启动时,会提示找不到。7.在不同的app下创建属于他们自己的urls.py 来替代原始的urls.py说到这里你应该明白了,django-host 的作用就是使得针对不同的二级域名,解析道它们对应的app下的urls.py
from django.conf.urls import urlfrom django.contrib import adminfrom views import *urlpatterns = [    url(r'^index$', index),]

这个就是类似你在不同app下创建urls.py的样子,注意from views import * 这个地方

到这里就设置好了。

uwsgi 和nginx 的配置就和一个app时一样。这个插件是从django的角度去解决多app,多域名的方法。貌似也是可以使用nginx 中的各种代理去配置,我个人还是喜欢这种方法。

还是简单的贴下我的配置文件。
uwsgi.ini

# myweb_uwsgi.ini file[uwsgi]# Django-related settingssocket =127.0.0.1:8000# the base directory (full path)chdir  = /home/auto_ss   #auto_ss为我的项目根目录# Django s wsgi filewsgi-file  = auto_ss/wsgi.py   #启动文件位置# mastermaster      = truepy-autoreload = 1   #这个配置项,如果djaong文件变化自动重新加载,不用每次手动重启# maximum number of worker processesprocesses       = 4threads         = 2stats  =127.0.0.1:9191buffer-size=32768

nginx配置文件

#第一个域名server {        listen       80;        server_name  www.test.com;        #root         /usr/share/nginx/html;        # Load configuration files for the default server block.        #include /etc/nginx/default.d/*.conf;        location / {          include uwsgi_params;          uwsgi_pass 127.0.0.1:8000;                }    }#第二个域名server {        listen       80;        server_name  teanslate.test.com;        #root         /usr/share/nginx/html;        # Load configuration files for the default server block.        #include /etc/nginx/default.d/*.conf;        location / {          include uwsgi_params;          uwsgi_pass 127.0.0.1:8000;                    }        }

这个django-host 插件我也是摸索着用的,如果你有其中不理解不明白的,欢迎留言讨论。

原创粉丝点击