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})
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: