小白:方法二: 通过配置 django 中间件来完成。里的 include("aaa.urls" aaa.urls 是代表什么呀? 没有这个文件啊

2020-04-04 13:03:56 +08:00
 ribuug
Django --- 两个域名访问使用同一个 django 项目的且访问路径不一样

我用了放法二。目前执行了,都用了'mysite.urls_bbbb', 就 是访问 aaa 也进行了 urls_bbbb.py
自己估计 是 url(r'^', include("aaa.urls", namespace="aaa")), 我没有把正确 的 aaa.urls 填进去,不知道 aaa.urls 是哪个目录下的哪个文件?

原文:
Django --- 两个域名访问使用同一个 django 项目的且访问路径不一样

方法二: 通过配置 django 中间件来完成.
首先得说一下实验的环境:
client <-> nginx <-> uwsgi <-> django_project
上面的流程就是我当前部署的 django 项目的环境.

要想通过 django 中间件来完成多域名使用同一个 django 项目, 首先, 需要确保 nginx 配置当中有添加此项:
proxy_set_header Host $host:$server_port;

余下的就是开始编写中间件了.

编写 MultipleDomainMiddleware 中间件
settings.py 所在目录下, 新建一个文件 middlewares.py, 并添加以下内容:

from django.utils.deprecation import MiddlewareMixin
from django.conf import settings


class MultipleDomainMiddleware(MiddlewareMixin):

def process_request(self, request):
host = request.get_host()
url_config = getattr(settings, 'MULTIPLE_UFL_CONFIG', None)

if url_config:
for key in url_config.keys():
if key in host:
request.urlconf = url_config[key]
settings.py 中修改一些配置
MIDDLEWARE = [
'mysite.middlewares.MultipleDomainMiddleware',
...
]
ALLOW_HOSTS = ['127.0.0.1', 'www.aaa.com', 'aaa.com', 'www.bbb.com', 'bbb.com']
MULTIPLE_UFL_CONFIG = {
'aaa.com': 'mysite.urls',
'bbb.com': 'mysite.urls_bbbb',
}
ROOT_URLCONF = 'mysite.urls'
添加相应的 urls.py 文件
同时在根 urls.py 文件所在目录新增一个文件 urls_bbb.py.两个文件的内容可能如下:
** urls.py **

from django.conf.urls import url, include
from django.contrib import admin
from django.conf import settings
from django.views.static import serve
import aaa.views

urlpatterns = [
url(r'^', include("aaa.urls", namespace="aaa")),
url(r'^admin/', admin.site.urls),
]
** urls_bbb.py **


from django.conf.urls import url, include
from django.contrib import admin
from django.conf import settings
from django.views.static import serve
import bbb.views

urlpatterns = [
url(r'^', include("bbb.urls", namespace="bbb")),
url(r'^admin/', admin.site.urls),
]
至此, 即可实现同一个 django 项目, 使用多个域名访问不同路径了.
1872 次点击
所在节点    Python
5 条回复
ribuug
2020-04-04 18:27:20 +08:00
向大佬求助。是想做成访问 aaa 的时候打开 pc 端,访问 bbb 的时候打开移动端。
xpresslink
2020-04-04 21:48:16 +08:00
你这个需求根本用不着这么费劲儿,
直接用 nginx 反向代理的时候按不同域名转发给不同子目录就可以啊。
说起来话长自己看
https://blog.csdn.net/starwmx520/article/details/53353500/
ribuug
2020-04-04 22:58:11 +08:00
@xpresslink 我是 aaa.com 访问同一个 django 项目的一个 a.view 。www.aaa.com 访问同一个 django 项目的另一个 H5.view 。您这个方法是不是说访问不同子目录,因为是同个 django,您这个好像有点不一样。
julyclyde
2020-04-06 11:47:07 +08:00
aaa 模下的 urls
ribuug
2020-04-06 13:20:08 +08:00
@julyclyde 不是很明白你的意思。 我感觉可能是 nignx 的 $host 在 aaa.comwww.aaa.com 时,传过来的值是一样的,所以导致这个步骤不行:

MULTIPLE_UFL_CONFIG = {
'aaa.com': 'mysite.urls',
'www.aaa.com': 'mysite.urls_H5',
}

实际是这么写的 ↑

但是访问 aaa.comwww.aaa.com 时,都执行了:mysite.urls_H5

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/659311

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX