В веб-приложении django, как вы даете пользователям свой собственный поддомен?
Я начинаю новый проект веб-приложения, используя Django и Pinax. Я хочу, чтобы мои пользователи могли давать уникальные доменные имена, такие как Wordpress и другие сайты : username.wordpress.com
. Я не уверен, как подойти к этому с Django, так как логика синтаксического анализа url (в urls.py) начинается с url после имени домена.
точнее, там будет несколько групп пользователей, каждая группа имеет уникальное имя. Не уверен, что это имеет значение, но я подумал, что должен упомянуть что.
есть ли способ манипулировать http-запросом, чтобы URL-адрес выглядел на Django, как будто url-адрес был чем-то вроде www.domain.com/groupname
, но все равно отображается в адресной строке браузера как groupname.domain.com
?
3 ответов
вы можете использовать некоторые пользовательские промежуточные программы для перехвата запроса и получения поддомена из него. Следующий код будет извлекать поддомен и перенаправлять на представление по реверсирование именованного 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()
.
вам нужно обработать это через ваш веб-сервер. Если у вас есть Django urls, как...
/users/<username>/
... затем используйте правила перезаписи на веб-сервере для сопоставления <username>.domain.com
to domain.com/users/<username>/
.
Если вы используете Apache, вы можете прочитать здесь. В противном случае каждый веб-сервер имеет свои собственные соглашения, но все они будут поддерживать понятие перезаписи url.