ImageField – formularios Django

ImageField en Django Forms es un campo de entrada para cargar archivos de imagen. El widget predeterminado para esta entrada es ClearableFileInput . Se normaliza a: Un objeto UploadedFile que envuelve el contenido del archivo y el nombre del archivo en un solo objeto. Este artículo trata sobre cómo cargar imágenes con formularios de Django y cómo puede guardarlas en la base de datos.
Nota: 
 

  • Cuando Django maneja la carga de un archivo, los datos del archivo terminan colocados en request.FILES (para obtener más información sobre el objeto de solicitud, consulte la documentación de los objetos de solicitud y respuesta).
  • Mientras trabaja con archivos, asegúrese de que la etiqueta del formulario HTML contenga la propiedad enctype=”multipart/form-data”.

Sintaxis
 

field_name = forms.ImageField(**options)

Django formulario ImageField Explicación

Ilustración de ImageField usando un ejemplo. Considere un proyecto llamado geeksforgeeks que tenga una aplicación llamada geeks. 
 

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

Ingrese el siguiente código en el archivo forms.py de la aplicación geeks
 

Python3

from django import forms
 
class GeeksForm(forms.Form):
    name = forms.CharField()
    geeks_field = forms.ImageField()

Agregue la aplicación geeks a INSTALLED_APPS 
 

Python3

# Application definition
 
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'geeks',
]

Ahora, para convertir este formulario en una vista, necesitamos una vista y una URL asignada a esa URL. Primero creemos una vista en views.py de la aplicación geeks, 
 

Python3

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

Aquí estamos importando ese formulario en particular de forms.py y creando un objeto en la vista para que se pueda representar en una plantilla. 
Ahora, para iniciar un formulario de Django, debe crear home.html, donde uno estaría diseñando las cosas a su gusto. Vamos a crear un formulario en home.html.
 

html

<form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Submit">
</form>

Finalmente, una URL para mapear a esta vista en urls.py 
 

Python3

from django.urls import path
 
# importing views from views..py
from .views import home_view
 
urlpatterns = [
    path('', home_view ),
]

Ejecutemos el servidor y verifiquemos qué sucedió realmente, Ejecutar 
 

Python manage.py runserver

django-forms-imagefield

Por lo tanto, se crea un ImageField de geeks_field reemplazando «_» con «». Es un campo para ingresar archivos de imagen del usuario.
 

¿Cómo cargar archivos usando ImageField – Django Forms?

ImageField se utiliza para la entrada de archivos de imagen en la base de datos. Se puede ingresar la identificación de correo electrónico, etc. Hasta ahora hemos discutido cómo implementar ImageField pero cómo usarlo en la vista para realizar la parte lógica. Para realizar algo de lógica, necesitaríamos obtener el valor ingresado en el campo en una instancia de string de python. 
ImageField es diferente de otros campos y debe manejarse correctamente. Como se indicó anteriormente, los datos obtenidos de ImageField se almacenarían en el objeto request.FILES . Vamos a crear un ImageField en modelos Django para demostrar cómo guardar imágenes usando formularios en la base de datos. Para obtener el código de trabajo para cargar archivos desde github, haga clic aquí
En modelos.py, 
 

Python3

from django.db import models
 
# Create your models here.
class GeeksModel(models.Model):
    title = models.CharField(max_length = 200)
    img = models.ImageField(upload_to = "images/")
 
    def __str__(self):
        return self.title

En vistas.py,
 

Python3

from django.shortcuts import render
from .forms import GeeksForm
from .models import GeeksModel
 
# Create your views here.
def home_view(request):
    context = {}
    if request.method == "POST":
        form = GeeksForm(request.POST, request.FILES)
        if form.is_valid():
            name = form.cleaned_data.get("name")
            img = form.cleaned_data.get("geeks_field")
            obj = GeeksModel.objects.create(
                                 title = name,
                                 img = img
                                 )
            obj.save()
            print(obj)
    else:
        form = GeeksForm()
    context['form']= form
    return render(request, "home.html", context)

Expliquemos qué hace este código, este código guarda el archivo cargado por el usuario en GeeksModel ImageField Database. Cada vez que se carga un archivo, se guarda en el objeto request.FILES con clave como nombre del campo. Entonces, hemos creado un modelo donde se guarda la imagen cargada por el usuario. Intentemos ahora guardar un archivo de imagen en la base de datos.
 

django-forms-imagefield-2

Se cargó correctamente y el archivo se guardó en la aplicación GeeksModel of geeks. El objeto anterior se imprime y, por lo tanto, se ha creado una instancia de obj. 
 

django-forms-imagefield-3

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 ImageField 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 *