parent
ecbc544c27
commit
655112a16a
130
6_API_Forms.md
130
6_API_Forms.md
@ -2,9 +2,137 @@
|
|||||||
*[Repositorio](https://gitea.kickto.net/jp.av.dev/intro_Django#user-content-django-wiki)*,
|
*[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)*,
|
*[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]()*
|
*[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)
|
||||||
|
<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