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读取浮点数和读取文本文件示例
May 06 Python
Python argv用法详解
Jan 08 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
Jan 10 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
Python中常见的异常总结
Feb 20 Python
Python实现的IP端口扫描工具类示例
Feb 15 Python
python IDLE 背景以及字体大小的修改方法
Jul 12 Python
python flask web服务实现更换默认端口和IP的方法
Jul 26 Python
Django实现简单网页弹出警告代码
Nov 15 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
Feb 07 Python
python实现ftp文件传输功能
Mar 20 Python
python实现简单的井字棋游戏(gui界面)
Jan 22 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中=赋值操作符对不同数据类型的不同行为
2011/01/02 PHP
PHP的autoload机制的实现解析
2012/09/15 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
学习ExtJS Window常用方法
2009/10/07 Javascript
JavaScript的变量作用域深入理解
2009/10/25 Javascript
JS实现弹性菜单效果代码
2015/09/07 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
[01:32]寻找你心中的那团火 DOTA2 TI9火焰传递活动今日开启
2019/05/16 DOTA
python解析文件示例
2014/01/23 Python
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
通过实例解析Python调用json模块
2019/12/11 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
Python计算信息熵实例
2020/06/18 Python
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
印尼最大的婴儿用品购物网站:Orami
2017/09/28 全球购物
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
财会自我鉴定范文
2013/12/27 职场文书
感恩父母的演讲稿
2014/05/06 职场文书
销售提升方案
2014/06/07 职场文书
大一学生个人总结
2015/02/15 职场文书
2015年纪委工作总结
2015/05/13 职场文书
班主任开场白
2015/06/01 职场文书
升学宴家长致辞
2015/07/27 职场文书
纪检干部学习心得体会
2016/01/23 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python