Django 配置多站点多域名的实现步骤
起步
要介绍一个非常方便的Django扩展包--django-hosts。它能够提供在不同的子域名下访问不同的app。例如,在项目中有多个应用app01、app02等,希望通过域名app01.example.com访问该应用。
安装与配置
使用pip进行安装:
pipinstalldjango-hosts
把它加入到INSTALLED_APPS中:
INSTALLED_APPS=[ ... 'django_hosts', ... ]
在中间件MIDDLEWARE的开头和结尾都添加HostsResponseMiddleware:
MIDDLEWARE=[ 'django_hosts.middleware.HostsRequestMiddleware',#头尾都要加 ... 'django_hosts.middleware.HostsResponseMiddleware', ]
在settings.py添加配置变量:
ROOT_HOSTCONF='project_name.hosts'#模块的路径,不是域名 DEFAULT_HOST='www'#Nameofthedefaulthost,wewillcreateitinthenextsteps
在settings.py同级目录创建hosts.py文件:
project_name/ |--__init__.py |--hosts.py#`ROOT_HOSTCONF`指向这个文件 |--settings.py |--urls.py +--wsgi.py
hosts.py内容为:
fromdjango.confimportsettings fromdjango_hostsimportpatterns,host host_patterns=patterns('', host('www',settings.ROOT_URLCONF,name='www'),#`name`与`DEFAULT_HOST`相同 host('app01','app01.urls',name='app01'), host('app02','app02.urls',name='app02'), )
URL反向映射与模板
URL反向映射需要额外一个参数作为主机:
fromdjango.shortcutsimportrender fromdjango_hosts.resolversimportreverse defhomepage(request): homepage_url=reverse('homepage',host='www')#host可以不传,将会使用DEFAULT_HOST user_list_url=reverse('user_list',host='app01') returnrender(request,'homepage.html',{'homepage_url':homepage_url})
模板上的修改:
{%loadhosts%}Homepage HelpArticles
总结
另外,由于域名不同,它们之间存在跨域问题,认证信息并不共享。更多可以查看官方文档:https://django-hosts.readthedocs.io/en/latest/
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。