场景
我们使用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-host
from django.conf import settings #导入settings
from ss_update import views #导入app1,我的app1叫ss_update
from translate import views #导入app2,我的app2叫translate
host_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 url
from django.contrib import admin
from 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 settings
socket =127.0.0.1:8000
# the base directory (full path)
chdir = /home/auto_ss #auto_ss为我的项目根目录
# Django s wsgi file
wsgi-file = auto_ss/wsgi.py #启动文件位置
# master
master = true
py-autoreload = 1 #这个配置项,如果djaong文件变化自动重新加载,不用每次手动重启
# maximum number of worker processes
processes = 4
threads = 2
stats =127.0.0.1:9191
buffer-size=32768
nginx配置文件
#第一个域名
server {
listen ;
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 :;
}
}
#第二个域名
server {
listen ;
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 :;
}
}
这个django-host 插件我也是摸索着用的,如果你有其中不理解不明白的,欢迎留言讨论。