English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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 錯誤是很重要的。