English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Django 表單處理

Creare un modulo in Django è simile a creare un modello. Qui, dobbiamo solo ereditare i campi del modulo della classe Django. Aggiungiamo un file forms.py nella cartella myapp che contiene i moduli del nostro applicazione. Creeremo un modulo di login.

myapp/forms.py

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
#-*- coding: utf-8 -*-
 from django import forms
 class LoginForm(forms.Form):
    user = forms.CharField(max_length = 100)
    password = forms.CharField(widget = forms.PasswordInput())

Come si può vedere dall'alto, il tipo di campo può utilizzare il parametro “widget” per la rendering HTML; nel nostro esempio, dobbiamo nascondere la password, non deve essere visualizzata. Nel nostro esempio, vogliamo nascondere la password senza mostrarla. L'input della data è DateInput, CheckboxInput è la casella di controllo ecc.

Usare moduli nelle viste

Ci sono due tipi di richieste HTTP, ovvero GET e POST. In Django, come attributo dell'oggetto della richiesta della vista, c'è una proprietà chiamata "metodo", nella quale viene impostato il tipo della richiesta e tutti i dati trasmessi tramite POST possono essere acceduti tramite il dizionario request.POST.

Creiamo una vista di login in "myapp/views.py" -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
#-*- coding: utf-8 -*-
 from myapp.forms import LoginForm
 def login(request):
    username = "not logged in"
    if request.method == "POST":
       #Get the posted form
       MyLoginForm = LoginForm(request.POST)
       if MyLoginForm.is_valid():
          username = MyLoginForm.cleaned_data['username']
    else:
       MyLoginForm = Loginform()
 
    return render(request, 'loggedin.html', {"username" : username})

Questa vista mostrerà i risultati del modulo di login in "loggedin.html". Per testarla, dobbiamo prima avere il template del modulo di login. Chiamiamolo: login.html.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
<html>
    <body>
       <form name="form" action="{% url "myapp.views.login" %}" 
          method="POST">{% csrf_token %}
          <div style="max-width:470px;">
             <center> 
                <input type="text" style="margin-left:20%;" 
                   placeholder="Identifiant" name="username"/>
             </center>
          </div>
 
          <br>
          <div style="max-width:470px;">
             <center>
                <input type="password" style="margin-left:20%;" 
                   placeholder="password" name="password"/>
             </center>
          </div>
 
          <br>
          <div style="max-width:470px;">
             <center> 
                <button style="border:0px; background-color:#4285F4; margin-top:8%;"
                   height:35px; width:80%; margin-left:19%;" type = "submit" 
                   value = "Login" >
                   <strong>Login</strong>
                </button>
             </center>
          </div>
       </form>
    </body>
 </html>

Il template visualizzerà un modulo di login e pubblicherà i risultati che abbiamo visto nella login di sopra. Potresti aver notato che il template, è solo per prevenire gli attacchi CSRF (Cross-Site Request Forgery) sul tuo sito web.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
{% csrf_token %}

Dopo aver ottenuto il template di login, dobbiamo presentare il template loggedin.html dopo la gestione del modulo.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
<html>
    <body>
       Sei: <strong>{{username}}</strong>
    </body>
 </html>

Ora, tutto ciò di cui abbiamo bisogno sono gli URLs per iniziare: myapp/urls.py

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import patterns, url
 from django.views.generic import TemplateView
 urlpatterns = patterns('myapp.views',
    url(r'^connection/', TemplateView.as_view(template_name = 'login.html')),
    url(r'^login/', 'login', name = 'login'))

Quando si accede a "/myapp/connection", riceveremo il template login.html visualizzato come segue -

Dopo la presentazione del modulo sopra, il formato è valido. Nel nostro esempio è necessario compilare due campi, e ottenere il seguente risultato -

Se il tuo nome utente è polo e se hai dimenticato la password, riceverai il seguente messaggio -

Usando la nostra validazione del modulo

Nell'esempio sopra, la validazione del modulo è -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
MyLoginForm.is_valid()

Usiamo solo il motore di validazione self-form di Django, assicurandoci che questo campo sia obbligatorio nell'istanza. Ora proviamo a garantire che l'utente che tenta di accedere esista nel nostro database come voce Dreamreal. Per questo, modificare myapp/forms.py in -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
#-*- coding: utf-8 -*-
 from django import forms
 from myapp.models import Dreamreal
 class LoginForm(forms.Form):
    user = forms.CharField(max_length = 100)
    password = forms.CharField(widget = forms.PasswordInput())
    def clean_message(self):
       username = self.cleaned_data.get("username")
       dbuser = Dreamreal.objects.filter(name = username)
       if not dbuser:
          raise forms.ValidationError("User does not exist in our db!")
       return username

現在,調用“is_valid”方法之後,我們將獲得正確的輸出,僅當用戶是在我們的數據庫。如果想查詢表單字段,僅僅通過添加一個以“clean_”開頭方法,字段名稱對應到表單類字段。引發一個 forms.ValidationError 錯誤是很重要的。