В веб-приложении 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 URL, как...
/users/<username>/
... затем используйте правила перезаписи в веб-сервере для сопоставления <username>.domain.com
в domain.com/users/<username>/
,
Если вы используете Apache, вы можете прочитать здесь. В противном случае каждый веб-сервер имеет свои собственные соглашения, но все будут поддерживать понятие перезаписи URL.
Посмотрите эту другую альтернативу настройки сервера приложений