Inserisci qui la tua pubblicità

Django - Creare modulo contatti

Form e Viste

In questo articolo, andiamo a progettare un form per il nostro sito web. A meno di costruire un sito web che non prevede la visita di utenti dal web, una form è un requisito indispensabile. Django mette a nostra disposizione una variegata gamma di strumenti e librerie per aiutarci a costruire le nostre form. In particolare in questa lezione andremo a creare un form "contatti", attraverso il quale gli utenti potranno contattarci. Requisiti basilari sono quindi: - Nome - Cognome - Email ( per poterci permettere di rispondere) - Telefono (opzionale) - Argomento per il quale ci contattano ( è prevista in questo caso una serie di opzioni, l'utente ne selezionerà soltanto una, ad esempio: commerciale, supporto ecc..) ---- #### Andiamo ora a vedere come funziona un form in HTML In HTML, un form è un insieme di elementi all'interno ```
...
``` che permettono un visitatore di fare le cose come inserire il testo, selezionare le opzioni, manipolare gli oggetti o controlli, e così via, e quindi inviare le informazioni indietro al server. Alcuni di questi elementi dell'interfaccia form - l'immissione di testo o caselle di controllo - sono abbastanza semplici e sono costruiti in HTML stesso. Altri sono molto più complessi; un'interfaccia che apre un selettore di dati o che consente di spostare un cursore o manipolare controlli tipicamente utilizza JavaScript e CSS, unito al form in HTML , ovvero utilizzando `````` che ci consente di visualizzare l'elemento per ottenere questi effetti. Così come il suo elemento ``````, un modulo deve specificare due cose: 1. dove: l'URL a cui i dati corrispondenti per l'input dell'utente devono essere inviati 2. come: il metodo HTTP da utilizzare per inviare i dati A titolo di esempio, il form di login per l'amministratore Django contiene diversi `````` elementi: uno di tipo = "text" per il nome utente, una di tipo = "password" per la password, e una di tipo = "submit" per il "Login" pulsante. Esso contiene anche alcuni campi di testo nascosti che l'utente non vede, che Django utilizza per determinare che cosa fare dopo. Quando il ``````, elemento viene attivato, i dati vengono restituiti a / admin / . ---- #### Metodi HTTP: GET e POST **GET e POST** sono gli unici metodi HTTP da utilizzare quando si tratta di forme. Modulo di login di Django viene restituito attraverso il metodo **POST** . Il browser quindi impacchetta i dati del modulo, li codifica per la trasmissione, li invia al server, e quindi riceve indietro la sua risposta. **GET** , al contrario, compone i dati inseriti nel form all'interno di una stringa, e la utilizza per comporre un URL. L'URL contiene l'indirizzo in cui i dati devono essere inviati, così come le chiavi e valori dei dati. È possibile vedere in azione, se si fa una ricerca nella documentazione Django, che produrrà un URL della forma https://docs.djangoproject.com/search/?q=forms&release=1 . GET e POST sono tipicamente utilizzati per scopi diversi. Qualsiasi richiesta che potrebbe essere utilizzato per cambiare lo stato del sistema - per esempio, una richiesta che rende modifiche nel database - dovrebbe usare POST . GET deve essere utilizzato solo per le richieste che non influenzano lo stato del sistema. GET non è adatto per creare form in cui andremo a inserire delle password, poiché la password apparirebbe nell'URL, e, quindi, apparirebbe anche nella cronologia del browser e del server visitato, e sarebbe visibile tutto in chiaro. Non è neanche adatto per grandi quantità di dati, o per dati binari, cosi come lo è un'immagine. Un'applicazione Web che utilizza GET come richieste di un modulo form di amministrazione è un rischio per la sicurezza: può essere facile per un utente malintenzionato imitare la richiesta di un modulo per ottenere l'accesso a parti sensibili del sistema. POST , in aggiunta con altre protezioni come quella di Django , ovvero la protezione CSRF, offre un maggiore controllo per l'accesso. D'altra parte, GET è adatto per essere utilizzato come modulo di ricerca web, perché gli URL che rappresentano una richiesta tramite GET possono essere facilmente memorizzati come segnalibro, condivisi o inviati nuovamente. ---- #### Django e le forme Costruire form è un compito quindi complesso. Considerate la form admin di Django, dove numerosi elementi di dati di diversi tipi possono avere bisogno di essere preparati per la visualizzazione nel form, restituito come pagina HTML, e modificati utilizzando un comoda interfaccia, quindi i dati devono arrivare al server, essere convalidati e ripuliti, e poi salvati o trasmessi per ulteriori elaborazioni. La funzionalità dei moduli di Django può semplificare e automatizzare vaste porzioni di questo lavoro, e può anche farlo in modo più sicuro rispetto a quello che la maggior parte dei programmatori sarebbe in grado di fare con codice scritto da loro stessi. Django gestisce tre parti distinte del lavoro che comporta form: * preparazione e ristrutturazione dei dati per renderlo pronto per il rendering * la creazione di form HTML per i dati * ricevere ed elaborare form presenti e dati dal client E ' possibile scrivere codice che fa tutto questo manualmente, ma Django può prendersi cura di tutto per voi. ---- #### Form con Django Al centro di questo sistema di componenti è una modulo form di Django. Più o meno allo stesso modo in cui un modello di Django descrive la struttura logica di un oggetto, il suo comportamento, e il modo in cui le sue parti sono rappresentate per noi, un modulo di classe descrive un modulo e determina come funziona e appare. Cosi come i campi di un modello mappano i campi del database, cosi i campi di un modulo form mappano un form in HTML `````` elementi. (A ModelForm associa i campi di una classe modello per form HTML `````` elementi attraverso un modulo , questo è ciò che l'amministratore Django si basa su.) I campi di un modulo sono essi stessi classi; gestiscono dati del modulo e di eseguire la convalida quando viene inviato un modulo. Un DateField e un FileField gestire molto diversi tipi di dati e hanno a che fare cose diverse con esso. Un campo modulo viene rappresentato a un utente nel browser come un "widget di" HTML - un pezzo di macchinario interfaccia utente. Ogni tipo di campo ha un adeguato predefinita classe Widget , ma questi può essere sostituito come richiesto. ---- #### Costruire un Form Si supponga di voler creare un semplice modulo sul vostro sito web, al fine di ottenere il nome dell'utente. Avresti bisogno di qualcosa di simile nel modello:
Questo dice al browser di restituire i dati del modulo all'URL / il tuo nome / , con il POST metodo. Verrà visualizzato un campo di testo, con l'etichetta "Il tuo nome:" e un pulsante "OK". Se il contesto modello contiene un current_name variabile, che verrà utilizzata per pre-riempire il your_name campo. Avrete bisogno di una visione che rende il modello contenente il form HTML, e che può fornire il current_name campo a seconda dei casi. Quando il modulo viene inviato, il **POST** richiesta che viene inviata al server conterrà i dati del modulo. Ora avrete anche bisogno di una vista corrispondente a quella / il tuo nome / URL che troverà adeguati coppie chiave / valore nella richiesta, e poi elaborarli. Questa è una forma molto semplice. In pratica, una forma può contenere decine o centinaia di campi, molti dei quali potrebbero aver bisogno di essere pre-popolato, e ci si potrebbe aspettare all'utente di lavorare attraverso il ciclo di modifica-presentare più volte prima di concludere l'operazione. Potremmo richiedere qualche convalida che si verifichi nel browser, anche prima che il form venga inviato; si potrebbe desiderare di utilizzare i campi molto più complesso, che permettono all'utente di fare le cose come le date di prelievo da un calendario e così via. A questo punto è molto più facile ottenere Django a fare la maggior parte di questo lavoro per noi. ---- #### File Forms.py Il modulo di classe Sappiamo già che cosa vogliamo che faccia il nostro Form. Il nostro punto di partenza per costruire il form attraverso Django è questo: Creiamo all'interno della nostra app il file forms.py:
from django import forms	
    class  NameForm ( forms.Form ): 	
         nome  =  forms.CharField( label = 'Il tuo nome' ,  MAX_LENGTH = 100 )		
Questo definisce una classe form con un solo campo ( nome ). Abbiamo applicato un'etichetta human-friendly per il campo, che apparirà nel
[email protected]