Los formularios nos dan una forma de recibir datos del usuario. Son útiles y muy fáciles de crear.
Los hay de dos tipos:
Los formularios son creados con Python y luego Django se encarga de transformarlos a HTML.
Estos formularios son creados en un archivo forms.py
dentro de la carpeta de la aplicación que los usara.
Primero, creamos un archivo dentro de nuestra aplicación llamado forms.py
, tal que quede tienda/forms.py
.
Para heredar los campos de un modelo, primero importamos forms
y ModelForm
dentro de forms.py
:
1 2 |
|
Luego debemos importar el modelo a nuestro forms.py
:
1 2 |
|
Ahora, los formularios en Django son declarados como clases Python:
1 2 3 4 5 6 7 8 |
|
Y ya está. Si, literal.
Ahora vamos a crear una nueva template templates/tienda/crud.html
para poder organizar todo y que quede bien:
1 2 3 4 5 6 7 |
|
Ahora, dentro del bloque content
mostramos el formulario:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
CSRF es un ataque peligroso en el cual un atacante atacar a un usuario cuya sesión se encuentra activa en un sitio, el sitio confía en él, pero el usuario no sabe que ejecuta código malicioso con sus credenciales.
La protección contra CSRF se puede desactivar, pero no se recomienda.
Mas información sobre el CSRF puede ser encontrada en https://owasp.org/www-community/attacks/csrf#overview
En views.py
creamos una nueva vista:
1 2 3 |
|
Obviamente, también necesitamos importar el ProductoForm
desde forms.py
:
1 |
|
Y ahora registramos la ruta en urls.py
:
1 2 3 4 5 6 7 8 9 10 11 |
|
Si todo va bien, al dirigirte a http://127.0.0.1:8000/crear/ deberías ver algo así:
Como puedes observar, el formulario es feo. Esto es ya que Django no sabe de la existencia de Boostrap.
Por ello, debemos editar el widget
asociado a los campos para poder aplicar estilos y atributos.
widgets
Un campo es un objeto con un tipo de dato asociado, este objeto es nada más que un input
, el cual posee atributos, y para acceder a estos, se usan los widgets
.
Para editarlos, vamos a forms.py
y modificamos los widgets
de cada campo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
Ahora, al actualizar la página, podremos ver los cambios.
Recomendación: Investiga sobre una librería de Python que se especializa en los formularios de Django.
django-crispy-forms
, puedes encontrar su documentación en https://django-crispy-forms.readthedocs.io/en/latest/.
Esta librería es un MUST HAVE (debes tener) en tu proyecto Django.
Tópicos importantes:
crispy
: el tag para renderizar el formulario.layouts
: para estilizado y lindura de tu formulario.En este curso, no usaremos ni enseñare a usar
django-crispy-forms
.
El próximo capitulo continuaremos con los formularios.