起步
要介绍一个非常方便的 django 扩展包-- django-hosts 。它能够提供在不同的子域名下访问不同的 app。例如,在项目中有多个应用 app01 、 app02 等,希望通过域名 app01.example.com 访问该应用。
安装与配置
使用 pip 进行安装:
1
|
pip install django - hosts
|
把它加入到 installed_apps 中:
1
2
3
4
5
|
installed_apps = [
...
'django_hosts' ,
...
]
|
在中间件 middleware 的 开头和结尾 都添加 hostsresponsemiddleware :
1
2
3
4
5
6
7
|
middleware = [
'django_hosts.middleware.hostsrequestmiddleware' , # 头尾都要加
...
'django_hosts.middleware.hostsresponsemiddleware' ,
]
|
在 settings.py 添加配置变量:
1
2
|
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 文件:
1
2
3
4
5
6
|
project_name /
| - - __init__.py
| - - hosts.py # `root_hostconf` 指向这个文件
| - - settings.py
| - - urls.py
+ - - wsgi.py
|
hosts.py 内容为:
1
2
3
4
5
6
7
8
|
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 反向映射需要额外一个参数作为 主机 :
1
2
3
4
5
6
7
|
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})
|
模板上的修改:
1
2
3
4
|
{ % 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/