FormView - представления на основе классов Django

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

FormView относится к представлению (логике) для отображения и проверки формы Django. Например форма для регистрации пользователей на geeksforgeeks. Представления на основе классов предоставляют альтернативный способ реализации представлений как объектов Python вместо функций. Они не заменяют функциональные представления, но имеют определенные отличия и преимущества по сравнению с функциональными представлениями:

  • Организация кода, связанного с конкретными методами HTTP (GET, POST и т. Д.), Может быть решена отдельными методами вместо условного перехода.
  • Объектно-ориентированные методы, такие как миксины (множественное наследование), могут использоваться для разделения кода на повторно используемые компоненты.

Представлениями на основе классов проще и эффективнее управлять, чем представлениями на основе функций. Представление на основе функций с множеством строк кода может быть преобразовано в представления на основе классов всего несколькими строками. Именно здесь вступает в силу объектно-ориентированное программирование.

Django FormView - представления на основе классов

Illustration of How to create and use FormView using an Example. Consider a project named geeksforgeeks having an app named 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 ?

After you have a project and an app, let’s create a form of which we will be creating FormView. In geeks/forms.py,

from django import forms
  
# creating a form
class GeeksForm(forms.Form):
    # specify fields for model
    title = forms.CharField()
    description = forms.CharField(widget = forms.Textarea)

After creating the form let’s create FormView. in geeks/views.py,

# import generic FormView
from django.views.generic.edit import FormView
  
# Relative import of GeeksForm
from .forms import GeeksForm
  
class GeeksFormView(FormView):
    # specify the Form you want to use
    form_class = GeeksForm
      
    # sepcify name of template
    template_name = "geeks / geeksmodel_form.html"
  
    # can specify success url
    # url to redirect after successfully
    # updating details
    success_url ="/thanks/"

Create a template for this view in geeks/geeksmodel_form.html,

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Save">
</form>

Map a url to this view in geeks/urls.py,

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

Now visit http://127.0.0.1:8000/,

Validate Form Data in Form View

Class Based Views provide in built functions for validating data in form. In geeks/views.py,

# import generic FormView
from django.views.generic.edit import FormView
  
# Relative import of GeeksForm
from .forms import GeeksForm
  
class GeeksFormView(FormView):
    # specify the Form you want to use
    form_class = GeeksForm
      
    # sepcify name of template
    template_name = "geeks / geeksmodel_form.html"
  
    # can specify success url
    # url to redirect after successfully
    # updating details
    success_url ="/thanks/"
  
    def form_valid(self, form):
        # This method is called when valid form data has been POSTed.
        # It should return an HttpResponse.
          
        # perform a action here
        print(form.cleaned_data)
        return super().form_valid(form)

One can perform desired functionality in form_valid function. In our case, it prints the data. Lets’ try entering data in the form and check if it is working.

Check in terminal if details have been printed.

 Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.  

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning – Basic Level Course