top of page

Creando una Aplicación Sencilla de Búsqueda en Django

Este tutorial es una adaptación del tutorial de Will Vicent de su página https://learndjango.com/. Una vez instalado Django en pythonanywhere.com podemos crear nuestra primera aplicación sencilla de búsqueda. Si no tienes instalado Django puedes utilizar este procedimiento para instalarlo.


Dentro del directorio de proyecto donde este el archivo manage.py, lanzamos una consola bash:


Lanzamos el comando de creación de una aplicación en Django:

python manage.py startapp ciudades

Dentro del archivo settings.py del proyecto global, aquí:

Añadimos la aplicación a la lista de aplicaciones presentes en nuestro proyecto de Django, por legibilidad puede ser preferible hacerlo así, utilizando apéndices a la lista de aplicaciones:

# Application definition
INSTALLED_APPS = []
INSTALLED_APPS += ['ciudades']

INSTALLED_APPS += [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
]

Dentro del directorio de la aplicación "ciudades" entramos en models.py para generar el modelo de datos simple que va a contener nuestra página:

from django.db import models

class Ciudad(models.Model):
    nombre = models.CharField(max_length=255)
    provincia = models.CharField(max_length=255)
    
    class Meta:
        verbose_name_plural = "ciudades"
    
    def __str__(self):
        return self.nombre

Los objetos ciudad contendrán el nombre de la ciudad, la provincia a la que pertenecen, una subclase del tipo "meta" que indica a Django como pluralizar el nombre de la propia clase y la sobrecarga del método de representación por cadena del objeto ciudad para que nos devuelva el nombre de la ciudad. Ahora tenemos que migrar dentro de la base de datos del proyecto este modelo de datos, para ello, desde el mismo directorio donde reside manage.py lanzamos los siguientes comandos:

python manage.py makemigrations ciudades
python manage.py migrate

En este momento hemos generado las estructuras de datos de nuestro proyecto, en el mismo directorio donde tenemos manage.py deberíamos tener nuestra base de datos de Django por defecto: db.sqlite3:


Podemos poblar de múltiples maneras esta base de datos, con inyecciones masivas de sql por ejemplo, en esta demostración vamos a generar un usuario administrador en nuestro proyecto para poder añadir manualmente entidades a nuestra sencilla base de datos de ciudades. Creamos un superusuario con es siguiente comando:

python manage.py createsuperuser

Tenemos que registrar nuestra aplicación de ciudades dentro de la aplicación de administración para poder trabajar desde ese panel de administración con el modelo de las ciudades, para ello tenemos que modificar el archivo en /ciudades/admin.py para que contenga lo siguiente, y que San Google me perdone la aliteración con administración:

# ciudades/admin.py
from django.contrib import admin
from .models import Ciudad

class CiudadAdmin(admin.ModelAdmin):
    list_display = ("nombre", "provincia",)
    
admin.site.register(Ciudad, CiudadAdmin)

Tenemos que actualizar nuestra pagina web, para ello, en pythonanywhere.com tenemos que ir a la pestaña Web y recargar la pagina:


Visitando nuestra pagina deberíamos seguir viendo la pagina por defecto del cohete de Django, si añadimos /admin al final visitaremos la pagina de administración. Podemos ingresar en la pagina con nuestro nombre y clave. Desde aquí podemos añadir ciudades a nuestra base de datos:

Para ver las ciudades que tenemos en nuestra base de datos a través de la pagina, tenemos que generar las vistas de nuestra pagina, las URLs correspondientes a las vistas y las plantillas ("templates") que muestran esas vistas. Primero vamos a modificar las URLs del proyecto:

El contenido de urls.py debería ser este, le estamos diciendo a Django que sobre una URL "vacía" incluya los URL que definamos para la aplicación ciudades dentro de sus propias URLs:

from django.contrib import admin
from django.urls import path, include

urlpatterns =  [path("admin/", admin.site.urls)]
urlpatterns += [path("", include("ciudades.urls"))]

Dentro del directorio de la app "ciudades" creamos un archivo urls.py:

Con este contenido:

from django.urls import path
from .views import HomePageView, SearchResultsView

urlpatterns =  []
urlpatterns += [path("buscar/", SearchResultsView.as_view(), name="resultados_busqueda")]
urlpatterns += [path("", HomePageView.as_view(), name="home")]

Donde vamos a tener dos paginas, una vista "home" utilizando la clase HomePageView y una vista de resultados de búsqueda mediante SearchResultsView. Nos tenemos que crear estas dos vistas en el archivo de vistas de la aplicación "views.py":

from django.views.generic import TemplateView, ListView
from .models import Ciudad

class HomePageView(TemplateView):
    template_name = 'ciudades/home.html'
    
class SearchResultsView(ListView):
    model = Ciudad
    template_name = 'ciudades/resultados_busqueda.html'

Ahora necesitamos generar nuestras plantillas, para ellos creamos un directorio dentro de nuestra aplicación llamado "templates", dentro de este añadimos otro directorio llamado como la aplicación "ciudades". De esta manera generamos un nuevo espacio de nombres que nos permite agrupar las plantillas o "templates" por aplicación para su reutilizarlo.

En este directorio crearemos nuestras plantillas home.html:

<!-- home.html -->
<h1>Página Home</h1>

Y resultados_busqueda.html, donde Django ejecutara el código Python dentro de dobles llaves {{}} para un bucle for usando la etiqueta "% for":

<!-- resultados_busqueda.html -->
<h1>Resultados de la Búsqueda:</h1>
<ul>
{% for ciudad in object_list %}
<li>
{{ ciudad.nombre }}, {{ ciudad.provincia }}
</li>
{% endfor %}
</ul>

Tenemos que añadir la localización de estas plantillas en el archivo settings.py del proyecto, la entrada DIRS en TEMPLATES tiene que ser esta:


TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [BASE_DIR / "templates"],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]

En nuestra pagina /buscar encontramos el resultado de las ciudades presentes en nuestra base de datos:


En nuestra siguiente demostración veremos como filtrar las ciudades en la base de datos y como dotar a nuestro HTML de un aspecto mas legible de manera sencilla.



66 visualizaciones0 comentarios

Entradas Recientes

Ver todo

Comentarios


bottom of page