This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Ir a:
Repositorio,
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
Indice Forms Api doc
Crear /TiendaOnline/gestionPedidos/forms.py
from django import forms
class FormContacto(forms.Form):
asunto = forms.CharField(max_length=35, required=False, initial='Contacto')
email = forms.EmailField(max_length=35)
msj = forms.CharField(widget=forms.Textarea(attrs={'rows': 5, 'cols': 26}))
🔸️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',''),['webmasterd@test.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>
...