2009-09-03 10 views
9

Jestem całkiem nowym użytkownikiem django i próbuję kilku prostych eksperymentów, aby zmoczyć stopy. używam django 1.0, prefork apache2 i mod_wsgi. Próbuję zbudować stronę z następującą strukturę urldjango - ochrona niektórych ścieżek sieciowych z podstawowym uwierzytelnianiem

/ 
/members 
/admin 

korzeń jest w zasadzie obszar publiczny.
ścieżka członków powinna być chroniona przy użyciu podstawowego uwierzytelniania (prawdopodobnie uwierzytelnionego przez Apache)
ścieżka administratora powinna być chroniona przy użyciu wbudowanego uwierzytelniania django.

następujące przykłady w dokumentacji mogę zasadniczo chronić całą witrynę z podstawowym uwierzytelnieniem, ale to nie jest to, czego chcę.

wyjątkiem od wirtualnego hosta config:

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> 

Czy ktoś pomoże mi punkt w dobrym kierunku (lub płaskim się powiedzieć mi = P), w jaki sposób było to możliwe?

dzięki


edit: po zabawy trochę Odkryłem, że można zrobić coś takiego:

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> 

Plik django.wsgi jest w zasadzie ten sam plik skopiowany do innego katalogu, tak że WSGIScriptAlias ​​jest inny. To jest hack-owski, ale działa ..

Czy istnieje lepszy sposób robienia tego, co chciałbym?
Czy są jakieś minusy, aby tak postępować?

dzięki

Odpowiedz

8

Zmiana:

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

do:

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

nie wierzę powinna trzeba:

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

cała strona jest zrobione w Django nie jsut w sekcji administratora. jeśli wyjmę WSGIScriptAlias, jak Apache wie, jak uruchomić stronę Django? tj./Members to ścieżka internetowa zdefiniowana w urls.py. to fizycznie nie istnieje w systemie plików. btw Pamiętam, że czytałem artykuły na Twoim blogu, by zdobyć referencje na temat django w przeszłości. chciałem tylko powiedzieć thx. –

+0

Nadal masz pierwsze WSGIScriptAlias ​​do instalacji aplikacji w katalogu głównym witryny, po prostu pozbyć się pod URL sub. Zakładam tutaj, że ostatecznie odnoszą się do tego samego wniosku. Dyrektywa Location zastosuje ograniczenie do tego podzbioru adresów URL dla głównej aplikacji. –

+0

ahh Nie zauważyłem, że podałeś dyrektywę "Lokalizacja" zamiast dyrektywy "Katalog". Spróbuję tego jutro. dzięki! –