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实现ipsec开权限实例
Nov 11 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 Python
Python subprocess模块详细解读
Jan 29 Python
Python IDLE清空窗口的实例
Jun 25 Python
python3使用matplotlib绘制条形图
Mar 25 Python
Python 窗体(tkinter)按钮 位置实例
Jun 13 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
Jul 28 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
python zip,lambda,map函数代码实例
Apr 04 Python
python保留格式汇总各部门excel内容的实现思路
Jun 01 Python
快速一键生成Python爬虫请求头
Mar 04 Python
python字典进行运算原理及实例分享
Aug 02 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
输出控制类
2006/10/09 PHP
php笔记之:有规律大文件的读取与写入的分析
2013/04/26 PHP
深入PHP5中的魔术方法详解
2013/06/17 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
2016/01/12 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
2017/04/17 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
jQuery EasyUI 选项卡面板tabs的使用实例讲解
2017/12/25 jQuery
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
vue组件三大核心概念图文详解
2019/05/30 Javascript
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
Vue通过Blob对象实现导出Excel功能示例代码
2020/07/31 Javascript
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
跟老齐学Python之有点简约的元组
2014/09/24 Python
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
使用Python实现牛顿法求极值
2020/02/10 Python
浅谈pandas dataframe对除数是零的处理
2020/07/20 Python
Python requests HTTP验证登录实现流程
2020/11/05 Python
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
有趣的睡衣和礼物:LazyOne
2019/11/27 全球购物
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
渔夫的故事教学反思
2014/02/14 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
小学班级口号大全
2015/12/25 职场文书
社区服务理念口号
2015/12/25 职场文书
PO模式在selenium自动化测试框架的优势
2022/03/20 Python