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 06 Python
深入学习Python中的装饰器使用
Jun 20 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
Sep 19 Python
python机器学习之神经网络(二)
Dec 20 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
Apr 02 Python
Python微医挂号网医生数据抓取
Jan 24 Python
python多进程读图提取特征存npy
May 21 Python
Python自动抢红包教程详解
Jun 11 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
Jun 19 Python
Flask项目中实现短信验证码和邮箱验证码功能
Dec 05 Python
python numpy数组中的复制知识解析
Feb 03 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
Apr 13 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中使用正则表达式进行查找替换
2013/06/13 PHP
PHP设计模式之简单投诉页面实例
2016/02/24 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
2017/01/17 Javascript
jQuery导航条固定定位效果实例代码
2017/05/26 jQuery
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
python append、extend与insert的区别
2016/10/13 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
详解python tkinter 图片插入问题
2020/09/03 Python
基于Python制作一副扑克牌过程详解
2020/10/19 Python
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
Linux如何压缩可执行文件
2014/03/27 面试题
建龙钢铁面试总结
2014/04/15 面试题
生产部统计员岗位职责
2014/01/05 职场文书
部队领导证婚词
2014/01/12 职场文书
总经理工作职责范文
2014/03/14 职场文书
采购部长岗位职责
2014/06/13 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
中学教师教学工作总结
2015/08/13 职场文书
2016年教代会开幕词
2016/03/04 职场文书
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python