Skip to content

Prueba de concepto

Javier edited this page Sep 9, 2016 · 2 revisions

Prueba de concepto

Tarea

Como espectador quiero poder buscar una obra y contactarme con el publicador para averiguar por la entrada

Pasos a seguir

Primer paso

El usuario ingresa en el input del template la obra a buscar

Segundo paso

El pedido de búsqueda llega al objecto SearchView, que es el encargado de resolver el pedido y enviar un respuesta. Si el pedido no tiene resultados devuelve una una lista vacia, y si lo tiene devuelve la cantidad de resultados necesarios. En este objecto View podemos declara el modelo de objecto que se va a buscar y tambien el template al cual se va a redireccionar.

class SearchView(ListView):
model = PlayTheater
template_name = 'search.html'

def get_context_data(self, **kwargs):
    search = self.request.GET.get("search_term", None)
    self.object_list = PlayTheater.objects.filter(play_name__icontains=search)
    context = super(SearchView, self).get_context_data(**kwargs)
    return context

En la linea de abajo es donde se comunica con la base de datos y busca el pedido. Esto lo hace a través de los manager que tienen los objetos de django que extiende de Models, estos "objetitos" tienen consultas a la base predeterminadas como el filter, el get, el exists, etc.

self.object_list = PlayTheater.objects.filter(play_name__icontains=search)

Tercer paso

Después se devuelve los parámetros en el contexto para que los lea el template de respuesta.

{% for play in object_list %}
    <div class="row">
    <div class="col-sm-2">
            <a href="#">
                <img src="{% static play.picture.url %}" class="img-thumbnail img-responsive"/>
            </a>
        </div>
        <div class="col-sm-10">
            <p>
            <a href="{% url 'underTheaterApp:playtheater_detail' pk=play.pk %}" name={{ play.pk }}>{{ play.play_name }}</a>
            </p>
            <p>
                {{ play.synopsis }}
            </p>
        </div>
    </div>
    {% empty %}
    <div class="alert alert-danger">
        <strong>No</strong> se encontraron resultados para tu busqueda.
    </div>
    {% endfor %}

En la linea del for es donde se lee los resultados de la busqueda

    {% for play in object_list %} // object_list es el parametro de context que seteamos en el SearchView

En caso de que no tengas resultados la aplicación te muestra una alerta avisando que no hay resultados para la búsqueda.

Cuarto paso

Suponiendo que la búsqueda devolvio resultados, el usuario puede tocar el nombre de la obra y entra a los detalles de la obra. En este punto se comunicaría con la vista PlayTheaterDetailView, que muestra los detalles de la obra. Solo le tenes que indicar que modelo es queres mostrar. Aclaracion: como no declaraste el template que te va a redirigir, django toma como default que el template debe estar en templates/underTheaterApp/playtheater_detail.html
(rutaDondeEstanLosTemplates/NombreDeLaApp/NombreDeLaClase_detail.html)

class PlayTheaterDetailView(DetailView):
    model = PlayTheater

Extras

Cree el modelo de las obras, del teatro, de las salas y del contacto de teatro. Tambien precargue datos a la aplicacion para que se puedan hacer pedidos de busqueda. Por ultimo hice test de vista y integre "travis" al proyecto Sin los extras la prueba de concepto no tenia sentido

Diagrama de arquitectura

Diagrama de Arquitectura

Clone this wiki locally