Согласно 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
Если вам нужно подробнее, прокомментируйте ниже, и я постараюсь помочь.