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抢票回家过年(代码简单)
Jan 21 Python
numpy中实现二维数组按照某列、某行排序的方法
Apr 04 Python
Python简单实现两个任意字符串乘积的方法示例
Apr 12 Python
Python爬取商家联系电话以及各种数据的方法
Nov 10 Python
详解Django-auth-ldap 配置方法
Dec 10 Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 Python
对Django url的几种使用方式详解
Aug 06 Python
学习Django知识点分享
Sep 11 Python
Python基于Socket实现简单聊天室
Feb 17 Python
python 解决print数组/矩阵无法完整输出的问题
Feb 19 Python
python爬虫基础知识点整理
Jun 02 Python
聊聊python中的循环遍历
Sep 07 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
wordpress之wp-settings.php
2007/08/17 PHP
那些年一起学习的PHP(二)
2012/03/21 PHP
php伪静态之APACHE篇
2014/06/02 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
2014/12/17 PHP
基于Laravel 5.2 regex验证的正确写法
2019/09/29 PHP
JavaScript下利用fso判断文件是否存在的代码
2010/12/11 Javascript
JS日程管理插件FullCalendar简单实例
2017/02/07 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
详谈表单重复提交的三种情况及解决方法
2017/08/16 Javascript
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
微信小程序当前时间时段选择器插件使用方法详解
2018/12/28 Javascript
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
JS sort方法基于数组对象属性值排序
2020/07/10 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
学习python (1)
2006/10/31 Python
遍历python字典几种方法总结(推荐)
2016/09/11 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
Python接口自动化判断元素原理解析
2020/02/24 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
Python 保存加载mat格式文件的示例代码
2020/08/04 Python
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
澳大利亚当地最大的时装生产商:Cue
2018/08/06 全球购物
PHP开发工程师面试问题集锦
2012/11/01 面试题
软件测试面试题
2015/10/21 面试题
白酒业务员岗位职责
2013/12/27 职场文书
积极分子思想汇报
2014/01/04 职场文书
《陶罐和铁罐》教学反思
2014/02/19 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
暑假打工感想
2015/08/07 职场文书
《牧场之国》教学反思
2016/02/22 职场文书
2016年“5.12”国际护士节活动总结
2016/04/06 职场文书
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技