V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ribuug
V2EX  ›  Python

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

  •  
  •   ribuug · 2020-04-04 13:03:56 +08:00 · 1986 次点击
    这是一个创建于 1700 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 项目, 使用多个域名访问不同路径了.
    5 条回复    2020-04-06 13:20:08 +08:00
    ribuug
        1
    ribuug  
    OP
       2020-04-04 18:27:20 +08:00
    向大佬求助。是想做成访问 aaa 的时候打开 pc 端,访问 bbb 的时候打开移动端。
    xpresslink
        2
    xpresslink  
       2020-04-04 21:48:16 +08:00
    你这个需求根本用不着这么费劲儿,
    直接用 nginx 反向代理的时候按不同域名转发给不同子目录就可以啊。
    说起来话长自己看
    https://blog.csdn.net/starwmx520/article/details/53353500/
    ribuug
        3
    ribuug  
    OP
       2020-04-04 22:58:11 +08:00
    @xpresslink 我是 aaa.com 访问同一个 django 项目的一个 a.view 。www.aaa.com 访问同一个 django 项目的另一个 H5.view 。您这个方法是不是说访问不同子目录,因为是同个 django,您这个好像有点不一样。
    julyclyde
        4
    julyclyde  
       2020-04-06 11:47:07 +08:00
    aaa 模下的 urls
    ribuug
        5
    ribuug  
    OP
       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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2538 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:31 · PVG 09:31 · LAX 17:31 · JFK 20:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.