12
4_Formularios
jp.av.dev edited this page 2021-07-02 22:14:30 -04:00
Ir a: Repositorio, Admin Panel, Envio de Mails
Formularios
Creacion del formulario
/TiendaOnline/gestionPedidos/templates/busqueda_prods.html
<html>
<head>
<title>Búsqueda de productos</title>
</head>
<body>
<form action="/buscar/" method="GET">
<input type="text" name="prod">
<input type="submit" value="Buscar">
</form>
</body>
</html>
Creación vista formulario
gestionPedidos/views.py
from django.shortcuts import render
# Create your views here.
def busqueda_productos(request):
return render(request, "busqueda_prods.html")
Restistrar url (path)
urls.py
...
from gestionPedidos import views
urlpatterns = [
....
path('buscar_productos/', views.busqueda_productos),
....
Crear vista para el submit 'buscar'
gestionPedidos/views.py
...
from django.http import HttpResponse
...
def buscar(request):
msj = "Estas búscando por: %r" %request.GET["prod"]
return HttpResponse(msj)
Registrar url
urls.py
...
urlpatterns = [
...
path('buscar/', views.buscar),
]
Metodo GET http://192.168.0.4:8000/buscar/?prod=alicate
Busqueda en BBDD
views.py
...
from gestionPedidos.models import Articulos
...
def buscar(request):
# Validación campo vacio
if request.GET["prod"]:
#msj = "Estas búscando por: %r" %request.GET["prod"]
prod_buscar = request.GET["prod"]
articulos = Articulos.objects.filter(nombre__icontains=prod_buscar)
return render(request, "resultado_busqueda.html", {"articulos":articulos, "query":prod_buscar})
else:
msj = "Debes introducir un termino de búsqueda"
return HttpResponse(msj)
__icontains similar a like SQL, busca en el campo indicado,
articulos que CONTENGAN la palabra a buscar.
resultado_busqueda.html
<body>
<p>Estás buscando <strong>{{query}}</strong></p>
{% if articulos %}
<p>Encontrados : {{articulos|length}} artículos</p>
<ul>
{% for articulo in articulos %}
<li>{{articulo.nombre}} {{articulo.seccion}} ${{articulo.precio}}</li>
{% endfor %}
</ul>
{% else %}
<p>Artículo no encontrado</p>
{% endif %}
</body>
Limitar cantidad de caracteres en busqueda
views.py
...
def buscar(request):
# Validación campo vacio
if request.GET["prod"]:
prod_buscar = request.GET["prod"]
if len(prod_buscar) > 20:
msj = "Termino de búsqueda demasiado largo"
else:
articulos = Articulos.objects.filter(nombre__icontains=prod_buscar)
return render(request, "resultado_busqueda.html", {"articulos":articulos, "query":prod_buscar})
...
Formulario de contacto
contacto.html
<body>
<h1>Formulario de contacto</h1>
<form action="/contacto/" method="POST">
{% csrf_token %}
<p>Asunto: <input type="text" name="asunto"></p>
<p>Mail : <input type="text" name="mail"></p>
<p>Mensaje: </p>
<p><textarea name="mensaje" rows="15" cols="45"></textarea></p>
<input type="submit" value="Enviar">
</form>
</body>
{% csrf_token %} Protección contra CSRF
This should not be done for POST forms that target external URLs, since that would cause the CSRF token to be leaked, leading to a vulnerability.
gracias.html
...
<h1>Gracias por contactarnos</h1>
...
views.py
...
def contacto(request):
if request.method == "POST":
return render(request, "gracias.html")
return render(request, "contacto.html")
urlpatterns urls.py
...
path('contacto/', views.contacto),`
...
Ir a: Repositorio, Admin Panel, Envio de Mails