Formularios Django

Cuando uno crea una clase de formulario , la parte más importante es definir los campos del formulario. Cada campo tiene una lógica de validación personalizada, junto con algunos otros ganchos. Este artículo gira en torno a varios campos que se pueden usar en un formulario junto con varias funciones y técnicas relacionadas con Django Forms. Los formularios se usan básicamente para tomar información del usuario de alguna manera y usar esa información para operaciones lógicas en las bases de datos. Por ejemplo, Registrar un usuario ingresando su nombre, correo electrónico, contraseña, etc.

Django mapea los campos definidos en los formularios de Django en campos de entrada HTML. Django maneja tres partes distintas del trabajo relacionado con los formularios:

  • preparar y reestructurar datos para que estén listos para renderizar
  • crear formularios HTML para los datos
  • recibir y procesar formularios enviados y datos del cliente

flowChart-1

Tenga en cuenta que todos los tipos de trabajo realizados por los formularios de Django se pueden realizar con elementos HTML avanzados, pero Django lo hace más fácil y eficiente, especialmente la parte de validación. Una vez que obtenga los formularios de Django, simplemente se olvidará de los formularios HTML.

Sintaxis:  Django Fields funciona como Django Model Fields y tiene la sintaxis:

 field_name = forms.FieldType(**options) 

Ejemplo:

Python3

from django import forms
 
# creating a form
class GeeksForm(forms.Form):
    title = forms.CharField()
    description = forms.CharField()

Uso de formularios de Django

Para usar Django Forms, uno necesita tener un proyecto y una aplicación trabajando en él. Después de iniciar una aplicación, puede crear un formulario en app/forms.py. Antes de comenzar a usar un formulario, veamos cómo iniciar un proyecto e implementar Django Forms.

Consulte los siguientes artículos para comprobar cómo crear un proyecto y una aplicación en Django. 

Crear un formulario Django

Crear un formulario en Django es completamente similar a crear un modelo, uno necesita especificar qué campos existirían en el formulario y de qué tipo. Por ejemplo, para ingresar un formulario de registro, es posible que necesite Nombre (CharField), Número de lista (IntegerField), etc. 

Sintaxis: 

from django import forms
        
class FormName(forms.Form):
         # each field would be mapped as an input field in HTML
        field_name = forms.Field(**options)

Para crear un formulario, en geeks/forms.py Ingrese el código,

Python3

# import the standard Django Forms
# from built-in library
from django import forms
   
# creating a form 
class InputForm(forms.Form):
   
    first_name = forms.CharField(max_length = 200)
    last_name = forms.CharField(max_length = 200)
    roll_number = forms.IntegerField(
                     help_text = "Enter 6 digit roll number"
                     )
    password = forms.CharField(widget = forms.PasswordInput())

Para obtener más información sobre cómo crear un formulario con formularios de Django, visite ¿ Cómo crear un formulario con formularios de Django? .

Renderizar formularios de Django

Los campos de formulario de Django tienen varios métodos integrados para facilitar el trabajo del desarrollador, pero a veces es necesario implementar cosas manualmente para personalizar la interfaz de usuario (UI). Un formulario viene con 3 métodos incorporados que se pueden usar para representar los campos de formulario de Django. 

Para convertir este formulario en una vista, muévase a views.py y cree una home_view como se muestra a continuación. 

Python3

from django.shortcuts import render
from .forms import InputForm
 
# Create your views here.
def home_view(request):
    context ={}
    context['form']= InputForm()
    return render(request, "home.html", context)

En vista, uno solo necesita crear una instancia de la clase de formulario creada anteriormente en forms.py. Ahora vamos a editar plantillas > home.html 

html

<form action = "" method = "post">
    {% csrf_token %}
    {{form }}
    <input type="submit" value=Submit">
</form>

Ahora, visite http://localhost:8000/

create-django-form


Para verificar cómo usar los datos generados por Django Forms, visite Render Django Form Fields 

Crear formulario Django a partir de modelos

Django ModelForm es una clase que se utiliza para convertir directamente un modelo en un formulario Django. Si está creando una aplicación basada en una base de datos, es probable que tenga formularios que se correspondan estrechamente con los modelos de Django. Ahora cuando tengamos nuestro proyecto listo, crea un modelo en geeks/models.py,

Python3

# import the standard Django Model
# from built-in library
from django.db import models
   
# declare a new model with a name "GeeksModel"
class GeeksModel(models.Model):
        # fields of the model
    title = models.CharField(max_length = 200)
    description = models.TextField()
    last_modified = models.DateTimeField(auto_now_add = True)
    img = models.ImageField(upload_to = "images/")
   
        # renames the instances of the model
        # with their title name
    def __str__(self):
        return self.title

Para crear un formulario directamente para este modelo, sumérgete en geeks/forms.py e ingresa el siguiente código:

Python3

# import form class from django
from django import forms
  
# import GeeksModel from models.py
from .models import GeeksModel
  
# create a ModelForm
class GeeksForm(forms.ModelForm):
    # specify the name of model to use
    class Meta:
        model = GeeksModel
        fields = "__all__"

Ahora visite http://127.0.0.1:8000/

Más sobre formularios de Django:

Lista de campos y tipos de datos básicos del formulario

La parte más importante de un formulario y la única parte requerida es la lista de campos que define. Los campos se especifican mediante atributos de clase. Aquí hay una lista de todos los tipos de campos de formulario utilizados en Django

Nombre Clase Entrada HTML
campo booleano clase BooleanField(**kwargs) Entrada de casilla de verificación
CharField clase CharField(**kwargs) Entrada de texto
campo de elección clase ChoiceField(**kwargs) Seleccione
TypedChoiceField clase TypedChoiceField(**kwargs) Seleccione
campo de fecha clase DateField(**kwargs) Entrada de fecha
Campo de fecha y hora clase DateTimeField(**kwargs) Entrada de fecha y hora
campo decimal clase CampoDecimal(**kwargs) NumberInput cuando Field.localize es False, de lo contrario TextInput
Campo de duración campo de duración de la clase (** kwargs) Entrada de texto
Campo de correo electrónico clase EmailField(**kwargs Entrada de correo electrónico
campo de archivo clase FileField(**kwargs) Entrada de archivo borrable
CampoRutaArchivo clase FilePathField(**kwargs) Seleccione
campo flotante clase FloatField(**kwargs) NumberInput cuando Field.localize es False, de lo contrario TextInput
campo de imagen clase ImageField(**kwargs) Entrada de archivo borrable
CampoEntero clase IntegerField(**kwargs) NumberInput cuando Field.localize es False, de lo contrario TextInput
Campo de dirección IP genérico clase GenericIPAddressField(**kwargs) Entrada de texto
campo de elección múltiple clase MultipleChoiceField(**kwargs) Seleccionar Múltiple
TypedMultipleChoiceField clase TypedMultipleChoiceField(**kwargs) Seleccionar Múltiple
NullBooleanField clase NullBooleanField(**kwargs) NullBooleanSelect
RegexField clase RegexField(**kwargs) Entrada de texto
campo de babosas clase SlugField(**kwargs) Entrada de texto
Campo de tiempo clase TimeField(**kwargs) Entrada de tiempo
campo URL clase URLField(**kwargs) URL de entrada
campo UUIID clase UUIDField(**kwargs) Entrada de texto

Argumentos del campo central

Los argumentos de Core Field son los argumentos dados a cada campo para aplicar alguna restricción o impartir una característica particular a un campo en particular. Por ejemplo, agregar un argumento requerido = Falso a CharField permitirá que el usuario lo deje en blanco. Cada constructor de clase Field toma al menos estos argumentos. Algunas clases de campo toman argumentos adicionales específicos de campo, pero siempre se debe aceptar lo siguiente:

.math-table { borde-colapso: colapsar; ancho: 100%; } .math-table td { borde: 1px sólido #5fb962; alineación de texto: izquierda! importante; relleno: 8px; } .math-table th { borde: 1px sólido #5fb962; relleno: 8px; } .math-table tr>th{ color de fondo: #c6ebd9; alineación vertical: medio; } .math-table tr:nth-child(odd) { background-color: #ffffff; }

Opciones de campo Descripción
requerido De forma predeterminada, cada clase de campo asume que el valor es obligatorio, por lo que para que no sea obligatorio, debe configurar requerido = Falso
etiqueta El argumento de la etiqueta le permite especificar la etiqueta «apto para humanos» para este campo. Esto se usa cuando el campo se muestra en un formulario.
sufijo_etiqueta El argumento label_suffix le permite anular el label_suffix del formulario por campo.
artilugio El argumento del widget le permite especificar una clase de widget para usar al representar este campo. Consulte Widgets para obtener más información.
texto de ayuda El argumento help_text le permite especificar texto descriptivo para este campo. Si proporciona texto de ayuda, se mostrará junto al campo cuando uno de los métodos de formulario de conveniencia represente el campo. 
 
error de mensajes El argumento error_messages le permite anular los mensajes predeterminados que generará el campo. Pase un diccionario con claves que coincidan con los mensajes de error que desea anular.
validadores El argumento de los validadores le permite proporcionar una lista de funciones de validación para este campo. 
 
localizar El argumento localizar permite la localización de la entrada de datos del formulario, así como la salida representada.
discapacitado _ El argumento booleano disabled, cuando se establece en True, desactiva un campo de formulario utilizando el atributo HTML disabled para que los usuarios no puedan editarlo. 
 

Publicación traducida automáticamente

Artículo escrito por NaveenArora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *