Ora che il database è stato creato, possiamo occuparci di definire il flusso dell'applicazione e di creare le View, e con esse la struttura della navigazione.
La nostra applicazione sarà composta da 3 pagine:
- lista dei contatti
- form per l'inserimento e la modifica di un contatto
- form per l'inserimento dei numeri di telefono di un contatto
Prima di definire queste View
inseriamo in primoprogetto/urls.py
le definizioni degli URL
delle rispettive pagine:
urlpatterns = patterns('', (r'^rubrica/$', 'primoprogetto.rubrica.views.index'), (r'^rubrica/(d+)/$', 'primoprogetto.rubrica.views.detail'), (r'^rubrica/form/$', 'primoprogetto.rubrica.views.form'), (r'^rubrica/nuovo/$', 'primoprogetto.rubrica.views.nuovo'), (r'^rubrica/nuovoNumero/$', 'primoprogetto.rubrica.views.nuovoNumero'), )
I pattern precedenti associano le espressioni regolari ad un modulo Python, in particolare:
(r'^rubrica/$', 'primoprogetto.rubrica.views.index')
indica al server che le richieste che rispettano l'espressione regolare ^rubrica/$
, cioé iniziano e finiscono per rubrica/
, vengono gestite mediante la View primoprogetto.rubrica.views.index
.
Il secondo URL definisce tutte le richieste nella forma /rubrica/<numero>/
e ha l'effetto di chiamare la funzione Python primoprogetto.rubrica.views.detail(request,'<numero>')
, ad esempio una richiesta come /rubrica/12/
produce una chiamata alla funzione primoprogetto.rubrica.views.detail(request,'12')
.
Le View che utilizzeremo sono:
index
, la prima pagina della rubrica con la lista dei contattidetail
, pagina di dettaglio per il contatto selezionatoform
, form di inserimento di un nuovo contattonuovo
, memorizza un nuovo contatto inserito (richiamata daform
)nuovoNumero
, memorizza un nuovo numero relativo ad un contatto
Definiamo ora index()
, form()
, nuovo()
, nuovoNumero()
e detail()
in rubrica/views.py
nel modo seguente:
from django.http import HttpResponse from primoprogetto.rubrica.models import Contatto, Telefono, Tipologia from django.shortcuts import render_to_response def index(request): lista_contatti=Contatto.objects.all().order_by('nome') return render_to_response('index.html', {'lista_contatti':lista_contatti}) def form(request, contatto_id=None): if contatto_id is not None: cont = Contatto.objects.get(id=contatto_id) lista_telefoni = Telefono.objects.filter(contatto=contatto_id) lista_tipologia = Tipologia.objects.all() return render_to_response('form.html', {'cont':cont, 'lista_telefoni':lista_telefoni, 'lista_tipologia':lista_tipologia}) return render_to_response('form.html',{}) def nuovo(request): cont = Contatto() cont.nome = request.POST['nome'] cont.cognome = request.POST['cognome'] cont.save() lista_tipologia = Tipologia.objects.all() return render_to_response('formTelefono.html', {'idContatto':cont.id, 'lista_tipologia':lista_tipologia}) def nuovoNumero(request): telefono = Telefono() telefono.numero = request.POST['numero'] telefono.tipologia_id = request.POST['tipotelefono'] telefono.contatto_id = request.POST['idContatto'] telefono.save() lista_tipologia = Tipologia.objects.all() lista_telefoni = Telefono.objects.filter(contatto=request.POST['idContatto']) return render_to_response('formTelefono.html', {'idContatto':request.POST['idContatto'], 'lista_tipologia':lista_tipologia, 'lista_telefoni':lista_telefoni}) def detail(request,contatto_id): try: cont = Contatto.objects.get(id=contatto_id) except Contatto.DoesNotExist: raise Http404 lista_telefoni = Telefono.objects.filter(contatto=contatto_id) return render_to_response('detail.html', {'cont':cont,'lista_telefoni':lista_telefoni})