L'ordine con cui definiamo le espressioni regolari nel file urls.py è molto importante, in quanto il server invoca il modulo Python della prima espressione regolare soddisfatta dalla richiesta.
Esaminiamo questa dichiarazione:
urlpatterns = patterns('',
(r'^app/', 'miosito.app.views.index'),
(r'^app/form/', 'miosito.app.views.form'),
)
La richiesta app/form/ soddisfa l'espressione regolare ^app/, quindi sarà invocato sempre il modulo miosito.app.views.index, nonostante l'espressione regolare successiva sia più simile alla richiesta che il server ha ricevuto. Per ottenere l'accesso alla View form dobbiamo quindi invertire l'ordine delle definizioni.
urlpatterns = patterns('',
(r'^app/form/', 'miosito.app.views.form'),
(r'^app/', 'miosito.app.views.index'),
)
Messaggi HTTP
Vediamo ora come impostare una View che restituisca messaggi HTTP. Possiamo utilizzare delle sottoclassi di HttpResponse:
- HttpResponseNotFound, per restituire la pagina Page Not Found (404)
- HttpResponseForbidden, per restituire la pagina Forbidden (403)
- HttpResponseServerError, per restituire la pagina Server Error (500)
facendo restituire alla view un'istanza di tali classi invece di HttpResponse. Vediamo subito un esempio pratico per capire come si utilizzano.
def vista(request):
#...
errore = ...
if errore:
return HttpResponseNotFound('<h1>Pagina non trovata </h1>')
else:
# ...
Notiamo che anche le sottoclassi di HttpResponse necessitano del codice HTML da restituire; per comodità Django prevede un altro metodo per gestire l'errore HTTP 404: se in qualsiasi punto del codice si lancia un'eccezione Http404 (raise Http404), Django la cattura e restituisce la pagina Page Not Found standard.
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: