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 从远程服务器下载东西的代码
Feb 10 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
Jun 18 Python
详解用python实现简单的遗传算法
Jan 02 Python
pandas数据处理基础之筛选指定行或者指定列的数据
May 03 Python
python 格式化输出百分号的方法
Jan 20 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
Apr 29 Python
python在openstreetmap地图上绘制路线图的实现
Jul 11 Python
爬虫代理池Python3WebSpider源代码测试过程解析
Dec 20 Python
python输出pdf文档的实例
Feb 13 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 Python
Python中Yield的基本用法
Oct 18 Python
如何通过python计算圆周率PI
Nov 11 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 Filter过滤器全面解析
2016/08/09 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
学习jquery之一
2007/04/27 Javascript
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
javascript两段代码,两个小技巧
2010/02/04 Javascript
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
js不能跳转到上一页面的问题解决方法
2013/03/01 Javascript
Seajs的学习笔记
2014/03/04 Javascript
JsRender实用入门教程
2014/10/31 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
python创建和使用字典实例详解
2013/11/01 Python
wxPython事件驱动实例详解
2014/09/28 Python
Python爬虫之模拟知乎登录的方法教程
2017/05/25 Python
用Python实现KNN分类算法
2017/12/22 Python
判断python字典中key是否存在的两种方法
2018/08/10 Python
python学生管理系统学习笔记
2019/03/19 Python
如何理解python中数字列表
2020/05/29 Python
浅析Python的命名空间与作用域
2020/11/25 Python
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
如何实现一个自定义类的序列化
2012/05/22 面试题
大学生求职信范文
2014/05/24 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
个人作风建设剖析材料
2014/10/11 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
联谊活动总结范文
2015/05/09 职场文书
《哪吒之魔童降世》观后感:世上哪有随随便便的成功
2019/11/08 职场文书
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL