From 655112a16a816484ddc7ddd60417682bdc18ceff Mon Sep 17 00:00:00 2001 From: "jp.av.dev" Date: Sun, 15 Nov 2020 15:47:45 -0300 Subject: [PATCH] --- 6_API_Forms.md | 130 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 129 insertions(+), 1 deletion(-) diff --git a/6_API_Forms.md b/6_API_Forms.md index 8cba055..a918deb 100644 --- a/6_API_Forms.md +++ b/6_API_Forms.md @@ -2,9 +2,137 @@ *[Repositorio](https://gitea.kickto.net/jp.av.dev/intro_Django#user-content-django-wiki)*, *[Envio de Mails](https://gitea.kickto.net/jp.av.dev/intro_Django/wiki/5_Envio_de_mails#user-content-envio-de-mails)*, *[Proyecto Web Completo]()* + +------- -## API Forms +## API Forms + +### Creación de formularios con API Forms + +Simplifica la creación de formularios e incluye validacion. + +[*API Forms doc*](https://docs.djangoproject.com/en/3.1/ref/forms/api/) +[*Indice Forms Api doc*](https://docs.djangoproject.com/en/3.1/ref/forms/#forms) + + +Crear */TiendaOnline/gestionPedidos/forms.py* +``` +from django import forms + +class FormContacto(forms.Form): + asunto = forms.CharField() + email = forms.EmailField() + m + sj = forms.CharField() +``` + +🔸️*python3 manage.py shell* +``` +(InteractiveConsole) +>>> from gestionPedidos.forms import FormContacto +>>> +>>> miForm = FormContacto() +>>> +>>> print(miForm) + + + +>>> +``` + + El formulario esta formateado como tabla. + Crea las etiquetas 'label', les da un nombre. + Crea los asuntos e inputs. + Por defecto estos son requeridos. + + **Cambiando el formato del formulario** + +ej. como ***parrafo*** +``` +>>> print(miForm.as_p()) +

+

+

+>>> +``` +ej. como ***lista*** (unsorted list) +``` +>>> print(miForm.as_ul()) +
  • +
  • +
  • +>>> +``` + +**Probando el formulario** ***is_valid() y cleaned_data*** +``` +>>> miForm = FormContacto({'asunto':'prueba', 'email':'test@mail.com', 'msj':'mensaje de prueba'}) +>>> +>>> miForm.is_valid() +True +>>> +>>> miForm.cleaned_data +{'asunto': 'prueba', 'email': 'test@mail.com', 'msj': 'mensaje de prueba'} +>>> +``` + +**Campo email invalido** +``` +>>> miForm = FormContacto({'asunto':'prueba', 'email':'test@mailcom', 'msj':'mensaje de prueba'}) +>>> +>>> miForm.is_valid() +False +>>> +>>> miForm.cleaned_data +{'asunto': 'prueba', 'msj': 'mensaje de prueba'} +>>> +``` + +### Cambiando views.py para usar el Api Forms +``` +... +from gestionPedidos.forms import FormContacto + +... +def contacto(request): + if request.method == "POST": + miForm = FormContacto(request.POST) + if miForm.is_valid(): + contenido = miForm.cleaned_data + + send_mail(contenido['asunto'], contenido['msj'], + contenido.get('email',''),['ratablastard@gmail.com'],) + + return render(request, 'gracias.html') + else: + miForm = FormContacto() + + return render(request, 'form_contacto.html', {"form":miForm}) +``` + +*templates/form_contacto.html* +``` +... + +

    Formulario de contacto

    + {% if forms.errors %} +

    Por favor revisa este campo

    + {% endif %} +
    {% csrf_token %} + + {{ form.as_table}} +
    + +
    + +... +``` +------- +**Ir a:** +*[Repositorio](https://gitea.kickto.net/jp.av.dev/intro_Django#user-content-django-wiki)*, +*[Envio de Mails](https://gitea.kickto.net/jp.av.dev/intro_Django/wiki/5_Envio_de_mails#user-content-envio-de-mails)*, +*[Proyecto Web Completo]()* \ No newline at end of file