代码之家  ›  专栏  ›  技术社区  ›  David542

在django中构造url的最佳方法

  •  0
  • David542  · 技术社区  · 6 年前

    以下是我当前用于测试我的网站是在本地部署、在暂存还是在生产环境中部署的代码:

    def get_base_url(request=None):
        BASE_URL = request.META.get('HTTP_HOST') if request else settings.STATIC_SITE_URL
        if not BASE_URL.startswith('http'):
            BASE_URL = 'http://' + BASE_URL # such as "localhost:8000"
        return BASE_URL
    

    要执行类似发送密码重置链接的操作,我将执行以下操作:

    BASE_URL = get_base_url(request)
    PATH = BASE_URL.rstrip('/') + reverse('logged_in')
    

    有没有更干净的方法?我尝试了其他一些方法,但这似乎返回了最正确和一致的结果。

    1 回复  |  直到 6 年前
        1
  •  1
  •   pythad    6 年前

    根据我在将许多Django应用程序部署到生产环境中的经验,最好的方法是将设置分为不同的模块。这也是非常好的描述 Two Scoops of Django Using Multiple Settings Files 第二章。

    settings/
        base.py
        local.py
        stage.py
        production.py
    

    local , stage , production base

    例如 local.py :

    from .base import *
    
    DEBUG = True
    
    EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'db_name',
            'HOST': 'localhost',
        }
    }
    
    INSTALLED_APPS += ['debug_toolbar', ]
    
    BASE_URL = 'http://localhost:8080/'
    

    例如 production.py :

    from .base import *
    
    DEBUG = False
    
    ...
    
    BASE_URL = 'https://example.com'
    

    stage.py :

    from .base import *
    
    DEBUG = False
    
    BASE_URL = 'https://stage.example.com'
    

    BASE_URL 对于每个设置文件中的每个特定环境,从中进行访问 settings.BASE_URL 你想去哪儿就去哪儿。

    如果你能让你的生活更轻松,并且可以根据环境动态地配置你的设置。