English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
myapp/forms.py
# Filename : example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 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())
Como se puede ver desde arriba, el tipo de campo puede usar el parámetro "widget" para renderizar en HTML; en nuestro ejemplo, queremos ocultar la contraseña, sin mostrarla. En nuestro ejemplo, queremos ocultar la contraseña sin mostrarla. La entrada de fecha es DateInput, CheckboxInput es la casilla de verificación, etc.
Usar formularios en las vistas
Hay dos tipos de solicitudes HTTP, que son GET y POST. En Django, como parámetro se pasa al objeto de solicitud de vista hay una propiedad llamada "método", donde se establece el tipo de solicitud y todos los datos pasados por POST pueden accederse a través del diccionario request.POST.
Vamos a hacer en "myapp/views.py crear una vista de inicio de sesión -
# Filename : example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 2020-08-08 #-*- coding: utf-8 -*- from myapp.forms import LoginForm def login(request): username = "not logged in" if request.method == "POST": #Obtener el formulario enviado MyLoginForm = LoginForm(request.POST) if MyLoginForm.is_valid(): username = MyLoginForm.cleaned_data['username'] else: MyLoginForm = Loginform() return render(request, 'loggedin.html', {"username" : username})
Esta vista mostrará el formulario de inicio de sesión en "loggedin.html". Para probarla, primero necesitamos el template del formulario de inicio de sesión. Vamos a llamarlo: login.html。
# Filename : example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 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>
El template mostrará un formulario de inicio de sesión y publicará los resultados que vimos anteriormente en el login. Puede haber notado que el template, es solo para evitar ataques de falsificación de solicitudes entre sitios (CSRF) en su sitio web.
# Filename : example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 2020-08-08 {% csrf_token %}
Una vez que tengamos el template de inicio de sesión, necesitamos que el formulario procesado muestre el template loggedin.html.
# Filename : example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 2020-08-08 <html> <body> Usted es: <strong>{{username}}</strong> </body> </html>
Ahora, solo necesitamos las URLs para comenzar: myapp/urls.py
# Filename : example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 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'))
Al acceder a"/myapp/conexión"، obtendremos el siguiente despliegue del template login.html -
Después de enviar el formulario anterior, el formato es válido. En nuestro ejemplo, es obligatorio llenar dos campos y obtener el siguiente resultado -
Si su nombre de usuario es polo y si olvidó su contraseña, recibirá el siguiente mensaje -
Usando nuestra propia validación de formulario
En el ejemplo anterior, se valida el formulario como -
# Filename : example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 2020-08-08 MyLoginForm.is_valid()
Usamos únicamente el motor de validación de formularios de Django, asegurándonos en la instancia que este campo es obligatorio. Ahora, intentemos asegurar que el usuario que intenta iniciar sesión existe en nuestra base de datos como Dreamreal. Para esto, modificamos myapp/forms.py para -
# Filename : example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 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("El usuario no existe en nuestra base de datos!") return username
Ahora, después de llamar al método 'is_valid', obtendremos la salida correcta, solo si el usuario está en nuestra base de datos. Si desea consultar los campos del formulario, simplemente agregue un método que comience con 'clean_' y el nombre del campo correspondiente al campo de la clase de formulario. Es importante lanzar un error de forms.ValidationError.