Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Le funzionalità e le relative View

Implementiamo le diverse funzioni, dalla lista dei contatti al prelievo dei dati tramite form
Implementiamo le diverse funzioni, dalla lista dei contatti al prelievo dei dati tramite form
Link copiato negli appunti

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 contatti
  • detail, pagina di dettaglio per il contatto selezionato
  • form, form di inserimento di un nuovo contatto
  • nuovo, memorizza un nuovo contatto inserito (richiamata da form)
  • 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})

Ti consigliamo anche