Прежде всего, если я хотел бы использовать подстановочный знак, это не будет "www", поскольку www - это не что иное, как поддомен.
Например, если я хочу разрешить всем доменам Google мою запись, будет " .google.com ».Например, www.google.com.au будет отображаться как недопустимый.Вы можете поставить подстановочный знак до конца, но тогда будет разрешено google.com.example.com , что не очень хорошая идея.Или, может быть, вы хотели бы разрешить всем сайтам Великобритании с именем домена, заканчивающимся на co.uk с записью " .co.uk ".
Таким образом, вы должны искатьдля поддоменов, характерных для общего:
Предположим, что доменное имя docs.google.co.uk, и у вас есть только запись " .co.uk ".
Запрос docs.google.co.uk - проверьте, разрешено ли полное имя хоста или нет.
Запрос для .docs.google.co.uk в случае любого подстановочного знака
Запрос для .google.co.uk
Запрос для .co.uk - Бинго, вы нашли подстановочный знак, это разрешено!
В любом случае, в вашем коде вы выбираете все доменные объекты издБ, а затем ищет подходящее доменное имя с циклом.Эта операция излишне замедлит ваш процесс.Вместо того, чтобы выбирать их все, вы должны позволить базе данных обработать удаление несвязанных доменов.
def dispatch(self, request, *args, **kwargs):
url = request.REQUEST['url']
host = urlparse.urlparse(url).netloc.lower().strip()
domains = Domain.objects.filter(domain=host)
if len(domains):
return super(ProcessRequestView, self).dispatch(request, *args, **kwargs)
else:
newHost = '.%s' %host
dotPosition = -1
for i in range(newHost.count('.')):
dotPosition = newHost.find('.', dotPosition + 1)
domains = Domain.objects.filter(domain=newHost[dotPosition:])
if len(domains):
return super(ProcessRequestView, self).dispatch(request, *args, **kwargs)
return HttpResponseForbidden()
Надеюсь, это поможет.