Подтвердить что ты не робот

В веб-приложении django, как вы предоставляете пользователям собственный субдомен?

Я запускаю новый проект веб-приложений, используя Django и Pinax. Я хочу предоставить своим пользователям уникальные доменные имена, такие как Wordpress и другие сайты: username.wordpress.com. Я не уверен, как подойти к этому с Django, поскольку логика синтаксического анализа URL (в urls.py) начинается с URL-адреса ПОСЛЕ имени домена.

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

Есть ли способ манипулировать HTTP-запросом, чтобы URL-адрес выглядел как Django, как будто URL-адрес был чем-то вроде www.domain.com/groupname, но все же отображался в адресной строке браузера как groupname.domain.com?

4b9b3361

Ответ 1

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

Поместите его в файл middleware.py в своем приложении.

Убедитесь, что вы создали промежуточное программное обеспечение в файле settings.py.

Убедитесь, что вы указали свое представление в urls.py

middleware.py

from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
import re

subdomain_pattern = re.compile('(?P<subdomain>.*?)\..*?')

class SubdomainMiddleware(object):
    def process_request(self, request):
        match = subdomain_pattern.match(request.get_host())
        subdomain = match.group('subdomain')
        redirect_url = reverse('groups_detail', args=[subdomain])
        return HttpResponseRedirect(redirect_url)

urls.py

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    url(r'^groups/(?P<name>.+)/$', 'groups.views.detail', {}, name='group_detail'),
)

Примечание: этот код не проверен.

Перенаправление может изменить внешний вид URL. Если вы хотите этого избежать, просто вызовите связанное представление, запишите его результат и верните его в HttpResponse().

Ответ 2

Вам нужно обработать это через ваш веб-сервер. Если у вас есть URL-адреса Django, такие как...

/users/<username>/

... затем используйте правила перезаписи на веб-сервере для отображения <username>.domain.com в domain.com/users/<username>/.

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

Ответ 3

Смотрите этот другой альтернативный вариант настройки сервера приложений