网络编程
位置:首页>> 网络编程>> Python编程>> Django 配置多站点多域名的实现步骤

Django 配置多站点多域名的实现步骤

作者:栖迟於一丘  发布时间:2022-05-23 23:53:46 

标签:Django,多站点,多域名

起步

要介绍一个非常方便的 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/

来源:http://www.hongweipeng.com/index.php/archives/1796/

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com