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入门篇之正则表达式
Oct 20 Python
菜鸟使用python实现正则检测密码合法性
Jan 05 Python
Python的re模块正则表达式操作
May 25 Python
Python闭包执行时值的传递方式实例分析
Jun 04 Python
python 字典修改键(key)的几种方法
Aug 10 Python
如何利用python制作时间戳转换工具详解
Sep 12 Python
Numpy的简单用法小结
Aug 28 Python
Python Tornado之跨域请求与Options请求方式
Mar 28 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 02 Python
Keras自定义IOU方式
Jun 10 Python
Python过滤序列元素的方法
Jul 31 Python
Python fileinput模块如何逐行读取多个文件
Oct 05 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/11/12 PHP
php类中的各种拦截器用法分析
2014/11/03 PHP
PHP-FPM实现性能优化
2016/03/31 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
js 字符串操作函数
2009/07/25 Javascript
javascript 一些用法小结
2009/09/11 Javascript
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
2012/02/03 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
django中的setting最佳配置小结
2017/11/21 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
python Web开发你要理解的WSGI &amp; uwsgi详解
2018/08/01 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
Python多线程爬取豆瓣影评API接口
2019/10/22 Python
浅谈Python type的使用
2019/11/19 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
Bobbi Brown芭比波朗美国官网:化妆师专业彩妆保养品品牌
2016/08/18 全球购物
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
写给女朋友的检讨书
2014/01/28 职场文书
中学教师师德承诺书
2014/05/23 职场文书
南京青奥会口号
2014/06/12 职场文书
服务宗旨标语
2014/07/01 职场文书
教师作风建设剖析材料
2014/10/11 职场文书
幼师自荐信范文
2015/03/06 职场文书
JavaWeb 入门篇(3)ServletContext 详解 具体应用
2021/07/16 Java/Android