vistas template examples create bootstrap django subdomain pinax

template - En una aplicación web django, ¿cómo le das a los usuarios su propio subdominio?



use templates django (3)

Debe manejar esto a través de su servidor web. Si tienes URL de Django como ...

/users/<username>/

... luego use reglas de reescritura en el servidor web para mapear <username>.domain.com a domain.com/users/<username>/ .

Si está usando Apache, puede leer here . De lo contrario, cada servidor web tiene sus propias convenciones, pero todas respaldarán la noción de reescrituras de URL.

Estoy comenzando un nuevo proyecto de aplicación web usando Django y Pinax. Quiero poder darles a mis usuarios nombres de dominio únicos como Wordpress y otros sitios: username.wordpress.com . No estoy seguro de cómo abordar esto con Django, ya que la lógica de análisis de URL (en urls.py) comienza con la URL DESPUÉS del nombre de dominio.

Más específicamente, habrá múltiples grupos de usuarios, cada grupo tendrá un nombre único. No estoy seguro de que eso marque la diferencia, pero pensé que debería mencionar eso.

¿Hay alguna forma en que pueda manipular la solicitud http para que la URL parezca a Django como si la URL fuera algo así como www.domain.com/groupname , pero todavía se mostrara en la barra de direcciones del navegador como groupname.domain.com ?


Puede usar algún middleware personalizado para interceptar la solicitud y obtener el subdominio de ella. El siguiente código recuperará el subdominio y lo redireccionará a una vista invirtiendo la url especificada .

Ponlo en un archivo middleware.py en tu aplicación.

Asegúrese de configurar el middleware en su archivo settings.py.

Asegúrate de haber nombrado tu vista en 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''), )

Nota: este código no ha sido probado.

Redirigir puede alterar la apariencia de la URL. Si desea evitar esto, simplemente llame a la vista asociada, capture su resultado y devuélvalo en una HttpResponse() .


Vea this otra alternativa configurando el servidor de aplicaciones