35 votes

Dans une application Web Django, comment attribuez-vous aux utilisateurs leur propre sous-domaine?

Je commence une nouvelle application web du projet à l'aide de Django et Pinax. Je veux être en mesure de donner à mes utilisateurs de noms de domaine uniques comme Wordpress et d'autres sites n' : username.wordpress.com. Je ne suis pas sûr de la façon d'aborder ce avec Django, depuis l'url logique d'analyse (en urls.py) commence avec l'url APRÈS le nom de domaine.

Plus précisément, il y aura plusieurs groupes d'utilisateurs, chaque groupe ayant un nom unique. Pas sûr que cela fait une différence, mais j'ai pensé que je devrais mentionner que.

Est-il une manière que je peux manipuler la requête http, de sorte que l'URL ressemble à Django comme si l'url était quelque chose comme www.domain.com/groupname, mais toujours montré dans la barre d'adresse du navigateur comme groupname.domain.com?

24voto

Soviut Points 26384

Vous pouvez utiliser coutume, middleware pour intercepter la demande et obtenir le sous-domaine à partir d'elle. Le code suivant récupère le sous-domaine et redirection vers une vue en inversant le nom de l'url.

Le mettre dans un middleware.py fichier dans votre application.

Assurez-vous de configurer le middleware dans votre settings.py fichier.

Assurez-vous que vous avez nommé votre point de vue dans 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'),
)

Remarque: ce code n'est pas testé.

La redirection peut modifier l'URL de l'apparence. Si vous voulez éviter cela, il suffit d'appeler la vue associée, la capture de son résultat, et le retourner dans un HttpResponse().

2voto

Daniel Naab Points 9857

Vous devez gérer cela via votre serveur Web. Si vous avez des URLs Django comme ...

 /users/<username>/
 

... puis utilisez les règles de réécriture du serveur Web pour mapper <username>.domain.com à domain.com/users/<username>/ .

Si vous utilisez Apache, vous pouvez lire ici . Sinon, chaque serveur Web a ses propres conventions, mais toutes prendront en charge la notion de réécriture d'URL.

0voto

panchicore Points 3288

Voir cette autre alternative en configurant le serveur d'applications

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X