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之玩转字符串(2)
Sep 14 Python
Python连接PostgreSQL数据库的方法
Nov 28 Python
使用实现XlsxWriter创建Excel文件并编辑
May 04 Python
django+xadmin+djcelery实现后台管理定时任务
Aug 14 Python
python实现机器学习之元线性回归
Sep 06 Python
python3使用pandas获取股票数据的方法
Dec 22 Python
set在python里的含义和用法
Jun 24 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
python ctypes库2_指定参数类型和返回类型详解
Nov 19 Python
详解Python中的分支和循环结构
Feb 11 Python
Python 解析xml文件的示例
Sep 29 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 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
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
PHP判断图片格式的七种方法小结
2013/06/03 PHP
PHP类继承 extends使用介绍
2014/01/14 PHP
phpstudy的php版本自由修改的方法
2017/10/18 PHP
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
远离JS灾难css灾难之 js私有函数和css选择器作为容器
2011/12/11 Javascript
Javascript实现重力弹跳拖拽运动效果示例
2013/06/28 Javascript
jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
2014/05/08 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
jquery图片切换插件
2015/03/16 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
在Python中使用next()方法操作文件的教程
2015/05/24 Python
python统计文本文件内单词数量的方法
2015/05/30 Python
使用Python设计一个代码统计工具
2018/04/04 Python
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
Django框架模板介绍
2019/01/15 Python
django中SMTP发送邮件配置详解
2019/07/19 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
pandas参数设置的实用小技巧
2020/08/23 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
HTML5 文件域+FileReader 分段读取文件并上传到服务器
2017/10/23 HTML / CSS
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
.NET笔试题(20个问题)
2016/02/02 面试题
事业单位请假制度
2014/01/13 职场文书
餐饮部总监岗位职责范文
2014/02/13 职场文书
公司管理建议书范文
2014/03/12 职场文书
中华魂演讲稿
2014/05/13 职场文书
初中班主任教育随笔
2015/08/15 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书