Dynami c Разрешенный хост в Django - PullRequest
0 голосов
/ 24 апреля 2020

Я разрабатываю мультитенантное приложение, используя django. Все работает нормально. Но в случае с ALLOWED_HOST, я немного запутался в том, как управлять динамическим c доменным именем. Я знаю, что могу использовать * для любых номеров для домена, но я не хотел использовать * на разрешенном хосте.

Вот мой вопрос, есть ли способ динамического управления разрешенным хостом.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Согласно Django do c,

Значения в этом списке могут быть полностью квалифицированными именами (например, 'www.example.com'), в этом случае они будут точно сопоставлены с заголовком Host запроса (без учета регистра, не включая порт). Значение, начинающееся с точки, можно использовать в качестве подстановочного знака субдомена: «.example.com» будет соответствовать example.com, www.example.com и любому другому субдомену example.com. Значение '*' будет соответствовать чему угодно; в этом случае вы несете ответственность за предоставление собственной проверки заголовка хоста (возможно, в промежуточном программном обеспечении; если это так, это промежуточное программное обеспечение должно быть указано первым в MIDDLEWARE).

Итак, если вы хотите сопоставить определенный поддомен, вы можете использовать подстановочный знак поддомен, как описано выше. Если вам нужна другая проверка, как сказано в документации, правильный способ сделать это - разрешить всем хостам и написать свое промежуточное программное обеспечение.

Если вы не знаете о промежуточном программном обеспечении, это простой механизм добавить функциональность, когда происходят определенные события. Например, вы можете создать функцию промежуточного программного обеспечения, которая выполняется всякий раз, когда вы получаете запрос. Это было бы правильным местом для вас, чтобы поставить ваш хост проверки. Вы можете получить хост, используя объект request. Обратитесь к официальным документам по промежуточному программному обеспечению, если вы хотите узнать больше.

Простой класс промежуточного программного обеспечения для вашей проблемы может выглядеть примерно так:

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 голосов
/ 24 апреля 2020

Параметр должен быть загружен один раз при запуске - как правило, эти параметры не меняются при настройке рабочего сервера. Вы можете разрешить несколько хостов или разрешить несколько поддоменов.

*. Example.com будет работать, или вы можете передать список доменов, если я правильно помню.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...