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内置变量-reversed(seq)
Jun 21 Python
python flask实现分页效果
Jun 27 Python
详解如何使用Python编写vim插件
Nov 28 Python
Python基于dom操作xml数据的方法示例
May 12 Python
python获取中文字符串长度的方法
Nov 14 Python
Python并发:多线程与多进程的详解
Jan 24 Python
Python Flask框架模板操作实例分析
May 03 Python
Python面向对象封装操作案例详解 II
Jan 02 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 Python
解决Django Haystack全文检索为空的问题
May 19 Python
Pyinstaller 打包发布经验总结
Jun 02 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 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构造函数的继承方法
2015/02/09 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
ThinkPHP 5.1 跨域配置方法
2019/10/11 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
JS 遮照层实现代码
2010/03/31 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
2013/04/28 Javascript
jQuery 删除或是清空某个HTML元素示例
2014/08/04 Javascript
javascript如何操作HTML下拉列表标签
2015/08/20 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
jquery实现具有收缩功能的垂直导航菜单
2016/02/16 Javascript
jQuery的实例及必知重要的jQuery选择器详解
2016/05/20 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
Layui选项卡制作历史浏览记录的方法
2019/09/28 Javascript
JavaScript如何判断input数据类型
2020/02/06 Javascript
如何HttpServletRequest文件对象并储存
2020/08/14 Javascript
Python实现将文本生成二维码的方法示例
2017/07/18 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
Python实现的爬取小说爬虫功能示例
2019/03/30 Python
Python中字符串与编码示例代码
2019/05/20 Python
python 杀死自身进程的实现方法
2019/07/01 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
python dumps和loads区别详解
2020/02/04 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
澳洲小众品牌的集合网站:BNKR
2018/02/23 全球购物
深圳茁壮笔试题
2015/05/28 面试题
管理站站长岗位职责
2013/11/27 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
用Python编写简单的gRPC服务的详细过程
2021/07/04 Python
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript