Una forma a煤n mejor de manejar formularios de Django

Hay un consejo profesional “Mejor manera de inicializar formularios de Django” , que es un buen consejo sobre c贸mo manejar formularios en menos c贸digo, pero no muestra c贸mo hacer que su vista sea m谩s personalizable.

En lugar de forma com煤n:

def contact(request):
if request.method == 'POST':
form
= ContactForm(request.POST)
if form.is_valid():
# Process the data in form.cleaned_data
return HttpResponseRedirect('/thanks/')
else:
form
= ContactForm()

return render(request, 'contact.html', {
'form': form,
})

Normalmente hago lo siguiente:

def contact(request, form_class=ContactForm, template_name='app_name/contact.html'):
form
= form_class(request.POST or None)
if form.is_valid():
form
.save()
return redirect('thanks_url')
return TemplateResponse(request, template_name, {
'form': form,
})

Los lados positivos son:

  • La clase de formulario y el nombre de la plantilla permiten personalizar su vista sin bifurcar su aplicaci贸n, simplemente manipulando las direcciones URL en la aplicaci贸n ext especial.
  • Mover el procesamiento de los datos del formulario a form.save (), tambi茅n permite personalizar el procesamiento por herencia de la clase del formulario, no reescribiendo todas las funciones de vista
  • use la redirecci贸n para redirigir a un nombre de URL espec铆fico, no a una URL. Las URL tienden a cambiar con el tiempo.
  • TemplateResponse: devuelve un objeto diferido, que se renderizar谩 m谩s tarde y que los decoradores o middlewares pueden personalizar.