ImageField - формы Django

Опубликовано: 24 Февраля, 2022

ImageField в Django Forms - это поле ввода для загрузки файлов изображений. Виджет по умолчанию для этого ввода - ClearableFileInput. Он нормализуется до: объекта UploadedFile, который объединяет содержимое файла и имя файла в один объект. Эта статья посвящена тому, как загружать изображения с помощью форм Django и как сохранить их в базе данных.
Примечание:

  • Когда Django обрабатывает загрузку файла, данные файла помещаются в request.FILES (для получения дополнительной информации об объекте запроса см. Документацию по объектам запроса и ответа).
  • При работе с файлами убедитесь, что тег HTML-формы содержит свойство enctype = ”multipart / form-data”.

Синтаксис

 field_name = forms.ImageField (** параметры)

Форма Django ImageField Пояснение

Иллюстрация ImageField на примере. Рассмотрим проект под названием geeksforgeeks, в котором есть приложение под названием geeks.

Refer to the following articles to check how to create a project and an app in Django. 
 

  • How to Create a Basic Project using MVT in Django?
  • How to Create an App in Django ?

Enter the following code into forms.py file of geeks app. 
 

Python3

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

Add the geeks app to 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",
]

Now to render this form into a view we need a view and a URL mapped to that URL. Let’s create a view first in views.py of geeks app, 
 

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)

Here we are importing that particular form from forms.py and creating an object of it in the view so that it can be rendered in a template. 
Now, to initiate a Django form you need to create home.html where one would be designing the stuff as they like. Let’s create a form in home.html.
 

html

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

Finally, a URL to map to this view in urls.py 
 

Python3

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

Запустим сервер и проверим, что на самом деле произошло, запустим

Python manage.py runserver

Таким образом, geeks_field ImageField создается заменой «_» на «». Это поле для ввода файлов изображений от пользователя.

Как загружать файлы с помощью ImageField - Django Forms?

ImageField is used for input of image files in the database. One can input Email Id, etc. Till now we have discussed how to implement ImageField but how to use it in the view for performing the logical part. To perform some logic we would need to get the value entered into field into a python string instance. 
ImageField is different from other fields and it needs to be handled properly. As stated above, data fetched from a ImageField would be stored in request.FILES object. Let’s create a ImageField in Django models to demonstrate the saving of images using forms in database. To get working code for upload of files from github click here. 
In models.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

In views.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)

Давайте объясним, что делает этот код, этот код сохраняет файл, загруженный пользователем в базу данных GeeksModel ImageField. Каждый раз, когда файл загружается, он сохраняется в объекте request.FILES с ключом в качестве имени поля. Итак, мы создали модель, в которой сохраняется загруженное пользователем изображение. Попробуем теперь сохранить файл изображения в базу данных.

Он успешно загрузился, и файл сохранен в GeeksModel приложения geeks. Вышеупомянутый объект печатается и, следовательно, был создан экземпляр obj.

Основные аргументы поля

Аргументы основного поля - это аргументы, данные каждому полю для применения некоторых ограничений или придания определенной характеристики конкретному полю. Например, добавление аргумента required = False в ImageField позволит пользователю оставить его пустым. Каждый конструктор класса Field принимает как минимум эти аргументы. Некоторые классы полей принимают дополнительные аргументы, относящиеся к конкретным полям, но всегда следует принимать следующее:

Параметры поля Описание
требуется По умолчанию каждый класс поля предполагает, что значение является обязательным, поэтому, чтобы сделать его ненужным, вам нужно установить required = False.
метка Аргумент метки позволяет вам указать «удобную для человека» метку для этого поля. Это используется, когда поле отображается в форме.
label_suffix Аргумент label_suffix позволяет вам переопределить label_suffix формы для каждого поля.
виджет Аргумент виджета позволяет вам указать класс виджета, который будет использоваться при рендеринге этого поля. См. Виджеты для получения дополнительной информации.
help_text Аргумент help_text позволяет указать описательный текст для этого поля. Если вы предоставите help_text, он будет отображаться рядом с полем, когда поле отображается одним из удобных методов формы.
Сообщения об ошибках Аргумент error_messages позволяет вам переопределить сообщения по умолчанию, которые будет выдавать поле. Передайте словарь с ключами, соответствующими сообщениям об ошибках, которые вы хотите переопределить.
валидаторы Аргумент валидаторов позволяет вам предоставить список функций валидации для этого поля.
локализовать Аргумент localize позволяет локализовать ввод данных формы, а также визуализированный вывод.
отключен. Логический аргумент disabled, если ему задано значение True, отключает поле формы с использованием атрибута disabled HTML, чтобы пользователи не могли его редактировать.

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.