parent
ecbc544c27
commit
655112a16a
128
6_API_Forms.md
128
6_API_Forms.md
@ -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]()*
|
Loading…
Reference in New Issue
Block a user