首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django中动态允许的主机

Django中动态允许的主机
EN

Stack Overflow用户
提问于 2020-04-24 14:50:56
回答 2查看 609关注 0票数 0

我正在使用django开发多租户应用程序。一切都运行得很好。但在ALLOWED_HOST的情况下,我有一点困惑,那就是如何管理动态域名。我知道我可以使用*来表示域的任何数字,但我不想在允许的主机中使用*。

我的问题是,是否有任何方法可以动态管理允许的主机。

EN

回答 2

Stack Overflow用户

发布于 2020-04-24 15:02:15

该设置应在启动时加载一次-通常,这些设置在生产服务器设置中不会更改。您可以允许多个主机,也可以允许多个子域。

*.example.com可以工作,或者如果我没记错的话,你可以传送域的列表。

票数 0
EN

Stack Overflow用户

发布于 2020-04-24 15:08:48

根据Django doc的说法

此列表中的主机值可以是完全限定的名称(例如'www.example.com'),在这种情况下,它们将与请求的

标头完全匹配(不区分大小写,不包括端口)。以句点开头的值可用作子域通配符:'.example.com‘将匹配example.com、www.example.com和example.com的任何其他子域。值'*‘将匹配任何内容;在这种情况下,您需要提供自己的Host头验证(可能是在中间件中;如果是,则必须首先在中间件中列出此中间件)。

因此,如果您想匹配某个子域,可以使用如上所述的子域通配符。如果您想要一个不同的验证,正如文档所说,正确的方法将是允许所有主机并编写您自己的中间件。

如果您不了解中间件,那么它们是一种在特定事件发生时添加功能的简单机制。例如,您可以创建一个在收到请求时执行的中间件函数。这将是您放置Host验证的正确位置。您可以使用request对象获取主机。如果您想了解更多,请参阅中间件上的Refer to the official docs

针对您的问题的简单中间件类可能如下所示-

代码语言:javascript
复制
import requests
from django.http import HttpResponse

class HostValidationMiddleware(object):
    def process_view(self, request, view_func, *args, **kwargs):
        host = request.get_host()
        is_host_valid = # Perform host validation
        if is_host_valid:
           # Django will continue as usual
           return None
        else:
           response = HttpResponse
           response.status_code = 403
           return response

如果您需要更多信息,请在下面发表评论,我将尽力帮助您。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61402742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档