Django 配置多站点多域名的实现步骤


Posted in Python onMay 17, 2019

起步

要介绍一个非常方便的 Django 扩展包-- django-hosts 。它能够提供在不同的子域名下访问不同的 app。例如,在项目中有多个应用 app01 、 app02 等,希望通过域名 app01.example.com 访问该应用。

安装与配置

使用 pip 进行安装:

pip install django-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' # Name of the default host, we will create it in the next steps

在settings.py同级目录创建 hosts.py 文件:

project_name/
 |-- __init__.py
 |-- hosts.py # `ROOT_HOSTCONF` 指向这个文件
 |-- settings.py
 |-- urls.py
 +-- wsgi.py

hosts.py 内容为:

from django.conf import settings
from django_hosts import patterns, 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 反向映射需要额外一个参数作为 主机 :

from django.shortcuts import render
from django_hosts.resolvers import reverse

def homepage(request):
  homepage_url = reverse('homepage', host='www') # host可以不传,将会使用 DEFAULT_HOST
  user_list_url= reverse('user_list', host='app01')
  return render(request, 'homepage.html', {'homepage_url': homepage_url})

模板上的修改:

{% load hosts %}

<a href="{% host_url 'home' host 'www' %}" rel="external nofollow" >Homepage</a>
<a href="{% host_url 'articles' host 'help' %}" rel="external nofollow" >Help Articles</a>

总结

另外,由于域名不同,它们之间存在跨域问题,认证信息并不共享。更多可以查看官方文档:https://django-hosts.readthedocs.io/en/latest/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python merge、concat合并数据集的实例讲解
Apr 12 Python
Python3.7 dataclass使用指南小结
Feb 22 Python
浅谈Python的条件判断语句if/else语句
Mar 21 Python
一个可以套路别人的python小程序实例代码
Apr 09 Python
python动态进度条的实现代码
Jul 03 Python
一行Python代码制作动态二维码的实现
Sep 09 Python
python3获取文件中url内容并下载代码实例
Dec 27 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
Jan 03 Python
python3实现往mysql中插入datetime类型的数据
Mar 02 Python
Python Pandas 对列/行进行选择,增加,删除操作
May 17 Python
python实现发送带附件的邮件代码分享
Sep 22 Python
python实现Thrift服务端的方法
Apr 20 Python
将Python字符串生成PDF的实例代码详解
May 17 #Python
Python Django框架单元测试之文件上传测试示例
May 17 #Python
Python django框架应用中实现获取访问者ip地址示例
May 17 #Python
Python Django框架实现应用添加logging日志操作示例
May 17 #Python
Python实现通过解析域名获取ip地址的方法分析
May 17 #Python
如何用C代码给Python写扩展库(Cython)
May 17 #Python
python实现坦克大战游戏 附详细注释
Mar 27 #Python
You might like
无数据库的详细域名查询程序PHP版(1)
2006/10/09 PHP
CI(CodeIgniter)框架配置
2014/06/10 PHP
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
ExtJs中gridpanel分组后组名排序实例代码
2013/12/02 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
详解Angular2中的编程对象Observable
2016/09/17 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
Python实现多属性排序的方法
2018/12/05 Python
python selenium firefox使用详解
2019/02/26 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
django中使用POST方法获取POST数据
2019/08/20 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
Mytheresa美国官网:德国知名的女性奢侈品电商
2017/05/27 全球购物
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
什么是Linux虚拟文件系统VFS
2015/08/25 面试题
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
2014年扶贫帮困工作总结
2014/12/09 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
交通事故调解协议书
2015/05/20 职场文书
教师网络培训心得体会
2016/01/09 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript