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实现去除下载电影和电视剧文件名中的多余字符的方法
Sep 23 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 Python
Python探索之URL Dispatcher实例详解
Oct 28 Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
Sep 13 Python
Python数据可视化库seaborn的使用总结
Jan 15 Python
python实现将一维列表转换为多维列表(numpy+reshape)
Nov 29 Python
学python爬虫能做什么
Jul 29 Python
python中字典增加和删除使用方法
Sep 30 Python
python中requests库+xpath+lxml简单使用
Apr 29 Python
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
Oct 16 Python
Python Flask搭建yolov3目标检测系统详解流程
Nov 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
mysql alter table命令修改表结构实例详解
2016/09/24 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
javascript 闭包详解
2015/07/02 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
socket.io实现在线群聊功能
2017/04/07 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
2019/11/10 Javascript
JavaScript进阶(三)闭包原理与用法详解
2020/05/09 Javascript
Python fileinput模块使用实例
2015/05/28 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
了解一下python内建模块collections
2020/09/07 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
浅谈html5与APP混合开发遇到的问题总结
2018/03/20 HTML / CSS
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
Ajax和javascript的区别
2013/07/20 面试题
建筑投标担保书
2014/05/20 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
python的html标准库
2022/04/29 Python