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搭建简易服务器分析与实现
Dec 15 Python
python实现的解析crontab配置文件代码
Jun 30 Python
python使用Berkeley DB数据库实例
Sep 26 Python
Python的IDEL增加清屏功能实例
Jun 19 Python
python Socket之客户端和服务端握手详解
Sep 18 Python
使用Python进行AES加密和解密的示例代码
Feb 02 Python
对Python3.6 IDLE常用快捷键介绍
Jul 16 Python
python实现linux下抓包并存库功能
Jul 18 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
详解Python IO编程
Jul 24 Python
python如何构建mock接口服务
Jan 28 Python
Python 装饰器(decorator)常用的创建方式及解析
Apr 24 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
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
php下连接mssql2005的代码
2011/01/17 PHP
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
js实现文本框中焦点在最后位置
2014/03/04 Javascript
node.js不得不说的12点内容
2014/07/14 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
AngularJS实现的简单拖拽功能示例
2018/01/02 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
koa router 多文件引入的方法示例
2019/05/22 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
基于使用paramiko执行远程linux主机命令(详解)
2017/10/16 Python
python机器人行走步数问题的解决
2018/01/29 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
python如何调用字典的key
2020/05/25 Python
python suds访问webservice服务实现
2020/06/26 Python
基于python实现图片转字符画代码实例
2020/09/04 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
Pure Collection美国官网:来自英国羊绒专家的奢华羊绒
2017/11/19 全球购物
客服专员岗位职责范本
2013/11/29 职场文书
中式餐厅创业计划书范文
2014/01/23 职场文书
同步小康驻村工作简报
2015/07/20 职场文书
CSS预处理框架——Stylus
2021/04/21 HTML / CSS
Python实现将多张图片合成MP4视频并加入背景音乐
2022/04/28 Python