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 SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
May 06 Python
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
Jun 04 Python
python遍历数组的方法小结
Apr 30 Python
python使用Turtle库绘制动态钟表
Nov 19 Python
简单了解python gevent 协程使用及作用
Jul 22 Python
Python threading的使用方法解析
Aug 28 Python
Django和Flask框架优缺点对比
Oct 24 Python
解决python 上传图片限制格式问题
Oct 30 Python
Python自动化之UnitTest框架实战记录
Sep 08 Python
python 实现客户端与服务端的通信
Dec 23 Python
Python datetime模块的使用示例
Feb 02 Python
Python 中数组和数字相乘时的注意事项说明
May 10 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 checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
thinkPHP5 tablib标签库自定义方法详解
2017/05/10 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
javascript 常用代码技巧大收集
2009/02/25 Javascript
使用命令对象代替switch语句的写法示例
2015/02/28 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
2016/05/31 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
Angularjs 制作购物车功能实例代码
2016/09/14 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
js正则表达式验证表单【完整版】
2017/03/06 Javascript
JavaScript模块详解
2017/12/18 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
Vue中jsx不完全应用指南小结
2019/11/01 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
python根据经纬度计算距离示例
2014/02/16 Python
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
详解python并发获取snmp信息及性能测试
2017/03/27 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
Django  ORM 练习题及答案
2019/07/19 Python
cProfile Python性能分析工具使用详解
2019/07/22 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
Python实现序列化及csv文件读取
2020/01/19 Python
详解python UDP 编程
2020/08/24 Python
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
活动简报范文
2015/07/22 职场文书
Flask搭建一个API服务器的步骤
2021/05/28 Python
用Python编写简单的gRPC服务的详细过程
2021/07/04 Python
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang
Django基础CBV装饰器和中间件
2022/03/22 Python