Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Readme.md

Backend con Python > Sesión 04 > Proyecto

Definiendo elementos necesarios para otorgar permisos para eliminar datos.

OBJETIVO

  • Crear la ruta y vista para eliminar un registro de una Tabla.
  • Definir permisos en base a grupos para la eliminación de registros.

REQUISITOS

  1. Actualizar repositorio

  2. Usar la carpeta de trabajo Sesion-04/Proyecto

  3. 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

    Maquetao de página de inicio

DESARROLLO

  1. Lo primero es agregar una opción para borrar un Tour si el usuario pertenece el grupo editores.

    Modificando la plantilla index.html como 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:

    Botón eliminar tour

  2. 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.html como 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_editor no está definida en la vista:

    Botón eliminar tour


  3. Se modifica la vista index() para que se agregue la variable es_editor al 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:

    Agregando grupo editores

    Luego se modifica el usuario bedutravels para que pertenezca al grupo editores

    Usuario bedutravels con grupo editores

    Si se recarga la página de inicio ya se debería de observar el botón de eliminar tour.


  4. 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.py

    path("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.

    Eliminando tour de prueba