Django 多站点多域名配置实战:django-hosts 扩展包详解

林见深
林见深
发布时间:2026-10-13| 3人浏览过
原创

本文详细介绍如何使用 django-hosts 扩展包在 Django 项目中实现多站点和多域名访问。涵盖从 pip 安装、INSTALLED_APPS 注册、中间件配置到 hosts.py 路由定义的全过程,并演示 URL 反向解析及模板标签在跨域名环境下的具体用法,帮助开发者轻松管理多个子域名应用。

Django 多站点配置概述

起步

本文将介绍一个非常实用的 Django 扩展库——django-hosts。该库允许开发者在不同的子域名下运行和访问独立的 Django 应用。例如,当项目中包含 app01、app02 等多个应用时,可以通过配置域名(如 app01.example.com)来直接访问对应的特定应用,从而实现多站点的隔离与管理。

django-hosts 安装与基础配置

安装与配置

首先,需要通过 pip 工具完成库的安装。


pip install django-hosts

接下来,需将该扩展包注册到项目的 INSTALLED_APPS 配置列表中。


INSTALLED_APPS = [
  ...
  'django_hosts',
  ...
]

在 settings.py 文件的 MIDDLEWARE 配置项中,必须同时添加 HostsRequestMiddleware 和 HostsResponseMiddleware。注意,这两个中间件需要分别放置在 MIDDLEWARE 列表的开头和结尾位置,以确保请求和响应的正确处理。


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 文件的内容应包含主机模式的定义,通过 patterns 和 host 函数将不同的子域名映射到对应的 URL 配置模块。


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反向映射与模板

在使用 URL 反向解析生成链接时,需要额外指定 host 参数以确定目标主机。


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})

在 Django 模板中,需加载 hosts 标签库,并使用 host_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>

注意事项与总结

总结

需要注意的是,由于不同域名之间存在跨域限制,各站点间的认证信息(如 Session)不会自动共享。如需了解更多细节,建议查阅官方文档:https://django-hosts.readthedocs.io/en/latest/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。