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 thread 并发且顺序运行示例
Apr 09 Python
Python使用MD5加密字符串示例
Aug 22 Python
Python实现Const详解
Jan 27 Python
python用Pygal如何生成漂亮的SVG图像详解
Feb 10 Python
Python 2与Python 3版本和编码的对比
Feb 14 Python
Python编程生成随机用户名及密码的方法示例
May 05 Python
Python Xml文件添加字节属性的方法
Mar 31 Python
jupyter notebook 中输出pyecharts图实例
Apr 23 Python
django-rest-swagger对API接口注释的方法
Aug 29 Python
python_mask_array的用法
Feb 18 Python
基于python 取余问题(%)详解
Jun 03 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
Feb 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教程 预定义变量
2009/10/23 PHP
解析php中获取url与物理路径的总结
2013/06/21 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
Cookie 注入是怎样产生的
2009/04/08 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
2016/08/02 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
JavaScript 基础表单验证示例(纯Js实现)
2017/07/20 Javascript
基于vue配置axios的方法步骤
2017/11/09 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
python使用matplotlib绘图时图例显示问题的解决
2017/04/27 Python
python使用mysql的两种使用方式
2018/03/07 Python
python将字符串转换成json的方法小结
2019/07/09 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
优秀学生干部个人的自我评价
2013/10/04 职场文书
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
《画杨桃》教学反思
2014/04/13 职场文书
个人借款协议书范本
2014/11/17 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
八月迷情观后感
2015/06/11 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android