Form processing with Class-based views
We can essentially process a form by subclassing the Class-based view itself:
class ClassBasedFormView(generic.View):
    template_name = 'form.html'
    def get(self, request):
        form = PersonDetailsForm()
        return render(request, self.template_name, {'form': form})
    def post(self, request):
        form = PersonDetailsForm(request.POST)
        if form.is_valid():
            # Success! We can use form.cleaned_data now
            return redirect('success')
        else:
            # Invalid form! Reshow the form with error highlighted
            return render(request, self.template_name,
                          {'form': form})Compare this code with the sequence diagram that we saw previously. The three scenarios have been separately handled.
Every form is expected to follow the Post/Redirect/Get (PRG) pattern. If the submitted form is found to be valid, then it must issue a redirect. This prevents duplicate form submissions.
However...