Backend con Python > Sesión 04 > Proyecto
- Crear la ruta y vista para eliminar un registro de una Tabla.
- Definir permisos en base a grupos para la eliminación de registros.
-
Actualizar repositorio
-
Usar la carpeta de trabajo
Sesion-04/Proyecto -
Los requerimientos consisten en que en base al maquetado de la página web de inicio mostrado en la imagen, realizar lo siguiente:
- La opción para borrar un registro sólo aparece si el usuario pertenece al grupo editores
- En cuando se dé click en el botón Eliminar tour, se hará una llamada a la url
/tour/eliminar/idTour/para eliminar el Tour seleccionado. - Se redirecciona a la página de inicio
-
Lo primero es agregar una opción para borrar un Tour si el usuario pertenece el grupo editores.
Modificando la plantilla
index.htmlcomo sigue:<div class="buttons-tour"> <div> <a href="/tour/{{ tour.id }}/"> <button class="button-tour">Ver tour</button> </a> </div> <div> <a href="/tour/eliminar/{{ tour.id }}/"> <button class="eliminar-tour">Eliminar tour</button> </a> </div> </div>
Esto deberá mostrar el botón Eliminar tour como se muestra a continuación:
-
En el paso anterior, el botón se muestra, pero uno de los requerimientos es que sólo los usuarios en el grupo editores seán quienes puedan eliminar, así que el botón debe aparecer sólo cuando el usuario pertenece al grupo mencionado, así que se agrega una condición al código html del archivo
index.htmlcomo sigue:{% if es_editor %} <div> <a href="/tour/eliminar/{{ tour.id }}/"> <button class="eliminar-tour">Eliminar tour</button> </a> </div> {% endif %}Ahora se obtiene lo siguiente porque la variable
es_editorno está definida en la vista:
-
Se modifica la vista
index()para que se agregue la variablees_editoral contexto de la plantilla:# Se determina si el usuario pertenece o no al grupo editores es_editor = request.user.groups.filter(name="editores").exists() return render(request, "tours/index.html", {"tours":tours, "zonas":zonas, "es_editor":es_editor})
si en este momento se actualiza la página de tours se verá exactamente lo mismo, así que antes de ello se procede a agregar el grupo editores usando el administrador de Django:
Luego se modifica el usuario bedutravels para que pertenezca al grupo editores
Si se recarga la página de inicio ya se debería de observar el botón de eliminar tour.
-
Después de las modificaciones anteriores ahora cada tour tiene la acción para poder ser eliminado usando una url
/tour/eliminar/idTour/por lo que se tiene que crear la ruta y vistas respectivas:Creando la ruta para atender la url mencionada por lo que se agrega el siguiente código al archivo
Bedutravels/tours/urls.pypath("tour/eliminar/<int:idTour>/", views.eliminar_tour, name="eliminar_tour"),
Notas como el sistema de rutas de Django nos permite agregar variables en las url's y además indicar el tipo de dato. Ver https://docs.djangoproject.com/en/2.2/topics/http/urls/
Creando la vista correspondiente en el archivo
Bedutravels/tours/views.py:@login_required() def eliminar_tour(request, idTour): """ Atiende la petición GET /tour/eliminar/<int:idTour>/ """ # Se obtienen los objetos correspondientes a los id's tour = Tour.objects.get(pk=idTour) # Se elimina el tour tour.delete() return redirect("/")
Notar que la vista incluye del decorador
@login_required()ya que no cualquiera puede eliminar un libro de un préstamo, así que ahora agregaremos los permisos usando el grupo eliminar.Se sugiere agregar otro Tour de prueba desde el administrador de Django y luego proceder a eliminarlo desde la página de la lista de tours.





