jp.av.dev 2020-11-15 15:47:45 -03:00
parent ecbc544c27
commit 655112a16a

@ -3,8 +3,136 @@
*[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
### 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)
<tr><th><label for="id_asunto">Asunto:</label></th><td><input type="text" name="asunto" required id="id_asunto"></td></tr>
<tr><th><label for="id_email">Email:</label></th><td><input type="email" name="email" required id="id_email"></td></tr>
<tr><th><label for="id_msj">Msj:</label></th><td><input type="text" name="msj" required id="id_msj"></td></tr>
>>>
```
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())
<p><label for="id_asunto">Asunto:</label> <input type="text" name="asunto" required id="id_asunto"></p>
<p><label for="id_email">Email:</label> <input type="email" name="email" required id="id_email"></p>
<p><label for="id_msj">Msj:</label> <input type="text" name="msj" required id="id_msj"></p>
>>>
```
ej. como ***lista*** (unsorted list)
```
>>> print(miForm.as_ul())
<li><label for="id_asunto">Asunto:</label> <input type="text" name="asunto" required id="id_asunto"></li>
<li><label for="id_email">Email:</label> <input type="email" name="email" required id="id_email"></li>
<li><label for="id_msj">Msj:</label> <input type="text" name="msj" required id="id_msj"></li>
>>>
```
**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*
```
...
<body>
<h1>Formulario de contacto</h1>
{% if forms.errors %}
<p style="color:red;"> Por favor revisa este campo</p>
{% endif %}
<form action="" method="POST">{% csrf_token %}
<table>
{{ form.as_table}}
</table>
<input type="submit" value="Enviar">
</form>
</body>
...
```
-------
**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]()*