2009-09-03 2 views
9

Sono abbastanza nuovo per Django e sto solo provando un paio di semplici esperimenti per bagnarmi i piedi. sto eseguendo django 1.0, apache2 prefork e mod_wsgi. Sto cercando di costruire un sito con la seguente struttura URLdjango - proteggere alcuni percorsi web con autenticazione di base

/ 
/members 
/admin 

la radice è fondamentalmente una zona pubblica.
il percorso dei membri deve essere protetto utilizzando l'autenticazione di base (probabilmente autenticato da apache)
il percorso di amministrazione deve essere protetto utilizzando l'autenticazione integrata in django.

seguendo gli esempi nella documentazione posso fondamentalmente proteggere l'intero sito con l'autenticazione di base, ma non è quello che voglio.

tranne dal config host virtuale:

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> 

Qualcuno può aiutarmi a punto nella giusta direzione (o flat out dirmi = P) su come rendere questo possibile?

grazie


edit: dopo aver giocato un po 'intorno ho scoperto che posso fare qualcosa di simile:

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> 

Il file django.wsgi è fondamentalmente lo stesso file copiato in un'altra directory in modo che WSGIScriptAlias ​​è diverso. È hack-ish ma funziona ..

C'è un modo migliore per fare ciò che mi piacerebbe?
Ci sono degli svantaggi nel farlo in questo modo?

grazie

risposta

8

Cambio:

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

a:

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

non credo dovrebbe essere necessario:

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

l'intero sito è fatto in Django, non è la sezione di amministrazione. se tiro fuori WSGIScriptAlias, come fa apache a sapere come funziona il sito django? i.e./members è un percorso Web definito in urls.py. non esiste fisicamente sul file system. btw mi ricordo di aver letto cose sul tuo blog per riferimento a cose di django in passato. volevo solo dirti. –

+0

Conserva ancora il primo WSGIScriptAlias ​​per il montaggio dell'applicazione nella root del sito, basta eliminare l'URL secondario. Presumo qui che alla fine si rivolgono alla stessa applicazione. La direttiva Location applica solo la restrizione a quel sottoinsieme di URL per l'applicazione principale. –

+0

ahh non ho notato che hai specificato la direttiva "Location" al posto della direttiva "Directory". Ci proverò domani. Grazie! –