2009-09-03 13 views
9

Je suis assez nouveau à django et j'essaie juste quelques expériences simples pour me mouiller les pieds. Je cours django 1.0, apache2 prefork et mod_wsgi. Je suis en train de construire un site avec la structure url suivantedjango - protéger certains chemins Web avec une authentification de base

/ 
/members 
/admin 

la racine est essentiellement une zone publique.
le chemin des membres doit être protégé en utilisant l'authentification de base (probablement authentifiée par apache)
le chemin d'administration doit être protégé en utilisant l'authentification django intégrée. En suivant les exemples de la documentation, je peux essentiellement protéger le site entier avec une authentification de base, mais ce n'est pas ce que je veux.

sauf de configuration d'hôte virtuel:

WSGIScriptAlias//django/rc/apache/django.wsgi 
<Directory /django/rc/apache> 
AuthType Basic 
AuthName "Authentication Required" 
AuthUserFile "/django/_HTPASSWD/.htpasswd" 
Require valid-user 

# Order allow,deny 
# Allow from all 
</Directory> 

Quelqu'un peut-il aider à me diriger dans la bonne direction (ou à plat me dire = P) sur la façon de rendre cela possible?

grâce


modifier: après avoir joué un peu j'ai découvert que je peux faire quelque chose comme:

WSGIScriptAlias//django/rc/apache/django.wsgi 
<Directory /django/rc/apache> 
Order allow,deny 
Allow from all 
</Directory> 

WSGIScriptAlias /members /django/rc/apache_httpauth/django.wsgi 
<Directory /django/rc/apache_httpauth> 
AuthType Basic 
AuthName "Authentication Required" 
AuthUserFile "/django/_HTPASSWD/.htpasswd" 
Require valid-user 

</Directory> 

Le fichier django.wsgi est fondamentalement le même fichier copié dans un autre répertoire afin que WSGIScriptAlias ​​est différent. C'est hack-ish mais ça marche ..

Existe-t-il une meilleure façon de faire ce que je voudrais?
Y a-t-il des inconvénients à le faire comme ça?

grâce

Répondre

8

Change:

<Directory /django/rc/apache_httpauth> 
AuthType Basic 
AuthName "Authentication Required" 
AuthUserFile "/django/_HTPASSWD/.htpasswd" 
Require valid-user 
</Directory> 

à:

<Location /members> 
AuthType Basic 
AuthName "Authentication Required" 
AuthUserFile "/django/_HTPASSWD/.htpasswd" 
Require valid-user 
</Location> 

Je ne crois pas que vous avez besoin:

WSGIScriptAlias /members /django/rc/apache_httpauth/django.wsgi 
+0

l'ensemble du site se fait dans django, pas jsut la section admin. si je supprime le WSGIScriptAlias, comment Apache sait-il comment exécuter le site django? , c'est-à-dire/membres est un chemin Web défini dans urls.py. il n'existe pas physiquement sur le système de fichiers. btw Je me souviens avoir lu des trucs sur ton blog pour référence sur des trucs de Django dans le passé. Je voulais juste dire thx. –

+0

Vous gardez toujours le premier WSGIScriptAlias ​​pour monter l'application à la racine du site, il suffit de se débarrasser de l'URL secondaire. Je présume ici qu'ils traitent finalement de la même demande. La directive Location applique simplement la restriction à ce sous-ensemble d'URL pour l'application principale. –

+0

ahh je n'ai pas remarqué que vous avez spécifié la directive "Location" au lieu de la directive "Directory". Je vais essayer ça demain. Merci! –