lydianmode_fp

Lydia Garcerán Amat · 2026—2027

Desarrollo Web en
Entorno Servidor

Contenido web teórico y práctico relativo al módulo de Desarrollo Web en Entorno Servidor de 2º DAW.

Presentación del módulo

UT 0

Introducción al Desarrollo Web en Entorno Servidor

En esta unidad nos prepararemos para el estudio y el trabajo. Haremos alguna revisión de conceptos que tenemos que tener claros y pondremos a punto nuestro entorno de trabajo.

Asumiremos que todos los estudiantes tienen conocimientos básicos de programación y están familiarizados con los conceptos fundamentales de los sistemas informáticos. Haremos simplemente una revisión de los conceptos más importantes.

01. HTML

HTML es un lenguaje de marcado que deberíamos tener muy claro a estas alturas. Si hubiera algún concepto que no recordamos con exactitud, podemos revisar cualquiera de las siguientes dos documentaciones:

  • Documentación de HTML en MDN es la documentación más completa y actualizada de HTML. Es la recomendada para programadores de alto nivel.
  • Documentación de HTML en W3Schools es una excelente recurso para principiantes. Si tenéis problemas para recordar los conceptos básicos deberíais empezar por aquí y recordar lo necesario. Si este es vuestro caso, deberíais poner un empeño especial en poneros al día antes de que sea tarde.

02. CSS

CSS es el lenguaje de estilo por defecto para CSS. Aunque es cierto que podemos usar frameworks como Bootstrap, Tailwind o Foundation, es importante entender los conceptos básicos de CSS para poder utilizarlos de manera efectiva. Los enlaces a la documentación oficial de CSS son:

  • Documentación de CSS en MDN es la documentación más completa y actualizada de CSS. Es la recomendada para programadores de alto nivel.
  • Documentación de CSS en W3Schools es una excelente recurso para principiantes. Si tenéis problemas para recordar los conceptos básicos deberíais empezar por aquí y recordar lo necesario. Si este es vuestro caso, deberíais poner un empeño especial en poneros al día antes de que sea tarde.

03. Python

Python es un lenguaje de programación interpretado de alto nivel. Nosotros lo utilizaremos para el desarrollo de aplicaciones web en el entorno servidor a través del framework Django. Aquí tenemos los enlaces a la documentación de W3Schools y de Django:

04. JSON

JSON es un formato de intercambio de datos ligero. Es ampliamente utilizado en aplicaciones web para el envío y recepción de datos entre el cliente y el servidor. Los enlaces a la documentación oficial de JSON son:

05. Git y GitHub

Git es un sistema de control de versiones distribuido. GitHub es una plataforma de hosting para proyectos Git. Antes de comenzar a trabajar con Git y GitHub, es importante entender los conceptos básicos de control de versiones y cómo utilizar estas herramientas para gestionar tu código de forma eficiente.

  • Proyecto: Conjunto de archivos y directorios que representan un trabajo de desarrollo.
  • Repositorio: Un proyecto que está siendo gestionado por Git. Contiene todos los archivos del proyecto y el historial de cambios.
  • Commit: Una instantánea del estado de los archivos en un momento dado. Cada commit tiene un identificador único y un mensaje descriptivo.
  • Branch: Una línea de desarrollo independiente dentro de un repositorio. Permite trabajar en nuevas características o correcciones de errores sin afectar la rama principal (main o master). Normalmente usaremos staging y development como ramas paralelas.
  • Merge: El proceso de combinar cambios desde una rama a otra. Se utiliza para integrar nuevas características o correcciones de errores en la rama principal. Nosotros haremos merges desde development a staging por cada tarea completada y desde staging a main al final de cada unidad.
  • Local: El espacio donde se almacenan los commits antes de ser enviados al repositorio remoto.
  • Remote: El repositorio alojado en un servidor remoto, como GitHub. Permite la colaboración entre varios desarrolladores y el acceso a los cambios desde diferentes ubicaciones. Subo cambios haciendo push a la rama remota, y los descargo haciendo pull.
Actividades

Pasos previos

  1. Descargamos e instalamos VSCode y Git en nuestro ordenador. Ejecutamos los siguientes comandos en la terminal, manteniendo las comillas, pero sustituyendo el nombre y el correo electrónico:
  2. git --global set user.name "Tu nombre"
    git --global set user.email "tu.email@ejemplo.com"
  3. Creamos una cuenta en GitHub
  4. Dentro de la cuenta creamos un nuevo repositorio. No importa si es privado o público, pero si es privado asegúrate de añadirme como lectora/comentadora
  5. Nos aseguramos de tener tres ramas creadas (master, staging y development)

Configuración de VSCode

  1. Dentro de VSCode, buscamos el
  2. Creamos una cuenta en GitHub
  3. Dentro de la cuenta creamos un nuevo repositorio. No importa si es privado o público, pero si es privado asegúrate de añadirme como lectora/comentadora
  4. Nos aseguramos de tener tres ramas creadas (master, staging y development)

UT 1 - RA 1

Fundamentos del desarrollo en
Entorno Servidor

Objetivos de la unidad:

  • Caracterizar los modelos de ejecución de código en frontend y backend
  • Reconocer las ventajas de la generación dinámica de páginas
  • Describir las funcionalidades de los servidores de aplicación y servidores web
  • Identificar los principales lenguajes de programación y frameworks para el desarrollo backend

01. Recorrido histórico del mundo web.

El paradigma de desarrollo en entornos servidor ha ido evolucionando con el tiempo, adaptándose a las necesidades cambiantes de los usuarios y las tecnologías disponibles. En cada época y contexto, los desarrolladores han tenido que adaptar sus enfoques y técnicas para satisfacer las demandas cambiantes del entorno tecnológico.

Para entender correctamente la evolución del desarrollo web en entornos servidor, es importante conocer la historia de la web y cómo ha cambiado a lo largo del tiempo. Desde los primeros días de la web estática hasta la era actual de aplicaciones web interactivas y dinámicas, cada etapa ha traído consigo nuevos desafíos y oportunidades para los desarrolladores.

Internet primigenio

En 1969, la red de ordenadores más grande del mundo se conocía como ARPANET, la precursora de internet. Era una red de comunicación muy limitada, principalmente utilizada por instituciones académicas y gubernamentales y fundamentalmente para fines académicos, de investigación y bélicos.

La web 1.0, la web estática

Podemos decir que Internet como lo conocemos hoy en día comenzó con la WWW en 1989.La web 1.0 se caracterizó por ser principalmente estática, con páginas web que ofrecían información de manera unidireccional. Los usuarios eran principalmente consumidores de contenido, y la interacción con las páginas web era limitada. Los desarrolladores se centraban en crear páginas web informativas y en la optimización de la velocidad de carga y la accesibilidad.

La web 2.0, la web dinámica

La web 2.0, termino acuñado en 2004, marcó un cambio significativo en la forma en que los usuarios interactuaban con la web. Surgieron plataformas de redes sociales, blogs y aplicaciones interactivas que permitían a los usuarios generar contenido y participar activamente en la web. Los desarrolladores comenzaron a centrarse en la experiencia del usuario, la interactividad y la personalización del contenido. Se popularizó el uso de tecnologías como AJAX, que permitían la actualización dinámica de contenido sin necesidad de recargar la página completa.

La web 3.0, la web semántica

La web 3.0, también conocida como la web semántica, se centra en la comprensión y el análisis de los datos para ofrecer experiencias más inteligentes y personalizadas. Se entiende que en la web 3.0 se deben integrar tecnologías como la inteligencia artificial, el aprendizaje automático y la realidad aumentada para crear experiencias más inmersivas y contextualmente relevantes. Los desarrolladores deberán adaptarse a estas nuevas tecnologías y enfoques para crear aplicaciones web más avanzadas y sofisticadas.

La web 4.0, la web natural

La web 4.0, también conocida como la web ubicua o la web de las cosas, se centra en la integración de la web con el mundo físico y la interconexión de dispositivos y objetos a través de Internet. Se espera que la web 4.0 permita una mayor automatización, personalización y conectividad en la vida cotidiana de los usuarios. Esta evolución de la web de momento es teórica, pero se teoriza que estará fuertemente marcada por la ausencia de interfaces de usuario tradicionales "GUI", y se apuntará más a interfaces naturales "NUI", donde el usuario interactúa directamente con los objetos y dispositivos a través de interfaces intuitivas y naturales como la interacción por voz con un asistente virtual.

02. Arquitectura cliente-servidor

La arquitectura cliente-servidor es un modelo de diseño de software que divide las responsabilidades entre dos componentes principales: el cliente y el servidor. El cliente es la parte de la aplicación que interactúa directamente con el usuario, mientras que el servidor es responsable de procesar las solicitudes del cliente y proporcionar los recursos necesarios. Esta arquitectura permite una mayor escalabilidad, flexibilidad y eficiencia en el desarrollo de aplicaciones web, ya que cada componente puede evolucionar de manera independiente y adaptarse a las necesidades cambiantes del entorno tecnológico.

Es fundamental entender que la verdadera fortaleza de esta arquitectura radica en los siguientes puntos:

  • Seguridad: Cuando desarrollamos aplicaciones en entornos servidor, la seguridad es una preocupación crítica. El servidor debe proteger los datos sensibles y garantizar que solo los usuarios autorizados puedan acceder a recursos específicos. Por esto, todas las operaciones y datos se manejan en el servidor, lo que permite una mejor protección de la información.
  • Escalabilidad: La arquitectura cliente-servidor permite una mejor escalabilidad, ya que el servidor puede manejar múltiples solicitudes simultáneamente y distribuir la carga de trabajo de manera eficiente mediante servicios de balanceo de carga como nginx. Esto facilita la expansión de la aplicación a medida que crece la demanda de usuarios y recursos.
  • Flexibilidad: La arquitectura cliente-servidor permite una mayor flexibilidad en el desarrollo y mantenimiento de aplicaciones web, ya que los componentes pueden evolucionar de manera independiente y adaptarse a las necesidades cambiantes del entorno tecnológico. Dividiremos entonces nuestros servicios en componentes relativamente independientes que puedan escalar por separado.

De esta forma, el cliente ejecutará su parte del código, normalmente JavaScript, relacionado con la presentación de la web, la navegación o aspectos poco relevantes como la pre-validación de un formulario (como mínimo, los formularios deben validarse siempre en el backend, pero podemos hacer una pre-validación en el frontend para que el usuario tenga un feedback inmediato). Del mismo modo el backend ejecutará el grueso del código, relacionado con la seguridad, la validación de operaciones, accesos a la base de datos y generación de contenido.

03. Tecnologías y lenguajes de programación

En el desarrollo web en entornos servidor, se utilizan diversas tecnologías y lenguajes de programación para crear aplicaciones web dinámicas y funcionales. Algunos de los lenguajes de programación más comunes incluyen PHP, Python, Ruby y JavaScript (Node.js). Cada lenguaje tiene sus propias características y ventajas, y los desarrolladores deben elegir el lenguaje más adecuado según los requisitos del proyecto y las preferencias del equipo de desarrollo. Además, se utilizan tecnologías como bases de datos, servidores web y frameworks para facilitar el desarrollo y la gestión de aplicaciones web en entornos servidor. Nosotros utiizaremos principalemte Python y su framework Django para el transcurso del módulo.

04. Diseño basado en dominios (DDD)

El diseño basado en dominios (DDD) es una aproximación al desarrollo de software que se centra en el dominio del problema y en la modelización de los conceptos del negocio. Esta técnica ayuda a crear aplicaciones más mantenibles y escalables, ya que se enfoca en la comprensión profunda del problema que se está resolviendo y en la creación de un modelo conceptual que refleje fielmente el dominio del negocio.

Al atacar el problema desde el dominio del negocio, se logra una mejor alineación entre la solución técnica y los requisitos del negocio, lo que resulta en aplicaciones más robustas y adaptables a los cambios en el entorno empresarial.

El siguiente vídeo nos enseña rápidamente cómo implementar este enfoque en el desarrollo de aplicaciones web:

Actividades UT1
  1. Explica con tus palabras cuál es la función de un back-end. ¿Qué ventajas aporta? ¿Cuáles son sus mayores inconvenientes?
  2. ¿Qué es un framework de desarrollo web? Menciona 2 ejemplos basados en diferentes lenguajes de programación. Haz una breve comparación entre ellos.
  3. ¿Es lo mismo un servidor de aplicación que un servidor web? ¿Cuál es la principal diferencia entre ambos?
  4. ¿Qué significa que una web se genere de forma dinámica?
  5. Análisis DDD
  6. Escoge un servicio web para estudiar su implementación basada en DDD. Puede ser el proyecto final del módulo.
  7. Escribe una lista de 20 eventos que puedas suceder en el servicio.
  8. Separa los eventos por dominios (principales y secundarios).
  9. Para cada dominio, escribe una lista de entidades y sus atributos.
>

UT 2 - RA 5

Implementación de un framework:
Django

Objetivos de la unidad:

  • Separar lógica de negocio de la presentación
  • Instalar y utilizar frameworks
  • Generar y servir html al cliente
  • Configurar la aplicación web
  • Aplicar los principios de la Programación Orientada a Objetos
Tarea 1 - Creando un Proyecto

Requisitos Previos

Nota: La mayoría de comandos están escritos para ejecutarse en un entorno Linux ya que es lo más cercano a un entorno de desarrollo real. No debería costar demasiado entender lo que hacen y traducirlos a Windows si es necesario. IMPORTANTE: Verifica siempre que lees un paso completamente antes de pasar al siguiente, que respetas la jerarquía de directorios y que los comandos se ejecutan en el entorno virtual correcto.

  1. Antes de empezar, vamos a asegurarnos de tener instalados Python y VSCode en nuestro ordenador
  2. Vamos a crear una carpeta llamada Backend para alojar el código de nuestro proyecto. Puedes crear la carpeta donde quieras. Abre la carpeta con VSCode.
  3. Dentro de VSCode instalamos los siguientes plugins:
    • Python
    • Python Environments
    • Pylance
    • Python Debugger
    • HTML CSS Support
    • Django (Baptiste Darthenay)
  4. Dentro de VSCode y con la carpeta del proyecto abierta, abrimos la terminal de VSCode e instalamos el siguiente paquete de python.
  5. terminal


    sudo apt install pipenv
  6. Pipenv es un entorno virtual para desarrollo de aplicaciones de Python. Podemos crear un entorno virtual de la siguiente forma:
  7. terminal


    mkdir .venv
    pipenv install
    pipenv shell

DJANGO

  1. Instalamos Django en nuestro entorno virtual
  2. terminal


    pip install django
    django-admin --version
                                    
  3. Si todo ha ido bien, deberíamos ver la versión de Django instalada.
  4. Ahora ejecutamos el siguiente comando para crear un nuevo proyecto Django:
  5. terminal


    django-admin startproject $NOMBRE_DEL_PROYECTO
  6. Si todo ha ido bien deberíamos tener la siguiente jerarquía de ficheros y directorios:
  7. directorios


    Backend/
    ├── .venv/
    └── $NOMBRE_DEL_PROYECTO/
        ├── manage.py
        └── $NOMBRE_DEL_PROYECTO/
            ├── __init__.py
            ├── asgi.py
            ├── settings.py
            ├── urls.py
            └── wsgi.py
  8. Ahora podemos ejecutar el servidor de desarrollo con el siguiente comando:
  9. terminal


    cd $NOMBRE_DEL_PROYECTO
    python manage.py runserver
  10. Intenta conectarte a localhost:8000. ¿Puedes verlo todo bien?
Enviar actividades por correo
Tarea 2 - Aplicaciones de un Proyecto Django

Nueva Homepage

  1. Nuestra servidor actualmente solo tiene la página por defecto de Django. Vamos a intentar entender cómo cambiarlo. Dentro de nuestra carpeta de proyecto crea un archivo views.py con un contenido como el siguiente:
  2. directorios


    Backend/
    ├── .venv/
    └── $NOMBRE_DEL_PROYECTO/
        ├── manage.py
        └── $NOMBRE_DEL_PROYECTO/
            ├── __init__.py
            ├── asgi.py
            ├── settings.py
            ├── urls.py
            ├── views.py
            └── wsgi.py

    views.py


    from django.http import HttpResponse
    
    def homepage(request):
        return HttpResponse("Hello World!")
  3. Ahora vamos a modificar el archivo urls.py para que apunte a nuestra nueva vista. Añade la siguiente línea al final del archivo:
  4. urls.py


    from django.urls import path
    from . import views
    from django.contrib import admin
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', views.homepage),
    ]
  5. Prueba el resultado. ¿Puedes ver el mensaje "Hello World!" en tu navegador? Si todo ha ido bien, podemos pasar al siguiente punto
  6. Vamos a crear un directorio templates y un fichero home.html como sigue:
  7. directorios


    Backend/
    ├── .venv/
    └── $NOMBRE_DEL_PROYECTO/
        ├── manage.py
        ├── $NOMBRE_DEL_PROYECTO/
        └── templates/
            └── home.html
  8. Ahora vamos a modificar nuestra vista para que devuelva el contenido de nuestro template. Modifica el archivo views.py como sigue:
  9. views.py


    from django.shortcuts import render
    
    def homepage(request):
        return render(request, 'home.html')
    

    Ten en cuenta que habrá líneas de views.py que debas borrar, otras que debas conservar y otras que debas modificar

  10. Ahora tenemos que decirle a Django que puede buscar plantillas dentro de esa carpeta. Eso lo hacemos desde los ajustes de Django. Buscamos la variable TEMPLATES y añadimos las siguentes líneas:
  11. settings.py


    import os
    
    TEMPLATES = [
        {
            [...]
            'DIRS': [
                os.path.join(BASE_DIR, "templates"),
            ],
            [...]
        },
    ]
    
  12. Ya podemos usar nuestro template en la vista.
  13. views.py


    from django.shortcuts import render
    
    def homepage(request):
        return render(request, 'home.html')
    
  14. Comprueba que puedas ver tu html. Si es así puedes continuar.
  15. Ahora vamos a añadir assets estáticos a nuestra aplicación.
  16. Dentro de la carpeta del proyecto, crea un directorio llamado static con una carpeta para cada tipo de archivo estático (img, js, css):
  17. directorios


    Backend/
    ├── .venv/
    └── $NOMBRE_DEL_PROYECTO/
        ├── manage.py
        ├── $NOMBRE_DEL_PROYECTO/
        ├── templates/
        └── static/
            ├── img/
            ├── js/
            └── css/
                                
  18. Ahora modificamos el archivo settings.py para indicarle a Django dónde buscar los archivos estáticos. Añadimos las siguientes líneas al final del archivo:
  19. settings.py


    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "static"),
    ]
  20. Ahora podemos usar los archivos estáticos en nuestro template. Por ejemplo, para añadir un archivo CSS, podemos hacer lo siguiente:
  21. home.html


    
    <!DOCTYPE html>
    <html lang="en">
    {% load static %}
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="{% static 'css/style.css' %}">
        <link rel="icon" href="{% static 'img/favicon.ico' %}" type="image/x-icon">
        <script src="{% static 'js/script.js' %}"></script>
        <title>Home</title>
    </head>
    </html>
  22. Comprueba que puedas ver tu html con los assets estáticos. Si es así puedes continuar.

Aplicaciones

  1. Vamos a crear una aplicación de Django, recuerda que grosso modo, una aplicación corresponde a un dominio del DDD es un módulo que contiene lógica específica para una funcionalidad determinada. Para crear aplicaciones en Django, utilizamos el comando:
  2. terminal


    python manage.py startapp $NOMBRE_DE_LA_APP

    settings.py


    INSTALLED_APPS = [
        [...]
        '$NOMBRE_DE_LA_APP',
    ]
  3. Se creará un directorio con el nombre de la aplicación y los archivos necesarios para su funcionamiento. Dentro de este directorio crearemos un templates nuevo y dentro de él otra carpeta con el nombre de la aplicación tal que así:
  4. directorios


    Backend/
        ├── .venv/
        └──  $NOMBRE_DEL_PROYECTO/
            ├── manage.py
            ├── $NOMBRE_DEL_PROYECTO/
            ├── templates/
            ├── static/
            └── $NOMBRE_DE_LA_APP/
                ├── __init__.py
                ├── admin.py
                ├── apps.py
                ├── migrations/
                ├── models.py
                ├── tests.py
                ├── views.py
                └── templates/
                    └── $NOMBRE_DE_LA_APP/
                        └── $NOMBRE_DEL_ARCHIVO.html
                        
  5. Ahora podemos editar los views.py y urls.py de la aplicación de la siguiente manera:
  6. $NOMBRE_DE_LA_APP/views.py


    from django.shortcuts import render
    
        def $NOMBRE_DE_LA_FUNCION(request):
            return render(request, '$NOMBRE_DE_LA_APP/$NOMBRE_DEL_ARCHIVO.html')

    $NOMBRE_DE_LA_APP/urls.py


    from django.urls import path
        from . import views
    
        urlpatterns = [
            path('', views.$NOMBRE_DE_LA_FUNCION),
        ]

    urls.py


    from django.urls import path, include
    
        urlpatterns = [
            [...]
            path('$NOMBRE_DE_LA_APP/', include('$NOMBRE_DE_LA_APP.urls')),
        ]
        ]
  7. Comprueba que todo funncione correctamente y añade hipervínculos para poder saltar de una página a otra
Enviar actividades por correo

UT 3 - RA 2

URLS y Templates

Objetivos de la unidad:

  • Insertar código dentro de HTML para generar webs
  • Utilizar etiquetas de inclusión de código
  • Escribir sentencias simples
  • Utilizar variables y operadores en el lenguaje de marcas
  • Estandarizar el uso de URLs

01. Templates

Como vimos en la unidad anterior, el contenido de un HTML se puede modificar gracias a las utilidades de Django. Hasta ahora lo único que hemos hecho es insertar URLs de forma dinámica, pero como te puedes imaginar no terminan ahí las utilidades.

Django propone diferentes herramientas que usan un sistema de marcas propio de Django como: {% ejemplo %}. Las marcas más simples son el uso de bloques reemplazables desde una plantilla.

Es decir, podemos crear una plantilla con el esqueleto de nuestra página web (hoja de estilos, pie de página, encabezados, menús...) y solo cambiar el contenido de la siguiente manera

template.html


<!DOCTYPE html>
<html lang="en">
{% load static %}
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="{% static 'css/style.css' %}">
    <link rel="icon" href="{% static 'img/favicon.ico' %}" type="image/x-icon">
    <script src="{% static 'js/script.js' %}"></script>
    <title>Home</title>
</head>

<body>
    <p>Este párrafo está fuera del bloque y no se puede modificar</p>
    {% block $NOMBRE_DEL_BLOQUE %}
        <p>Este es un contenido de ejemplo dentro del bloque y sí se puede modificar</p>
    {% endblock $NOMBRE_DEL_BLOQUE%}
</body>
</html>

En otro archivo podemos definir una herencia, exactamente igual que una Clase de cualquier lenguaje de programación y redefinimos solo aquerllo que queremos cambiar. Un HTML de ejemplo se podría quedar tal que así:

index.html


{% extends 'template.html' %}

{% block $NOMBRE_DEL_BLOQUE %}
    <h1>Este titulo reemplaza el contenido por defecto dentro del bloque</h1>
{% endblock $NOMBRE_DEL_BLOQUE%}

Tarea 1
  1. Crea una plantilla parecida a la del ejemplo que contenga toda la estructura báśica de la web. Incluye bloques para lo que consideres necesario, pero especialmente:
    • Título de la página
    • Contenido principal (sin incluir menú de navegación ni pie de página)
  2. Crea las siguientes webs que hereden de tu plantilla con {& extends '...' &}
    • Página web principal de acogida
    • Página de la aplicación que creaste en la tarea anterior
    • Página web de contacto con un formulario HTML sencillo
  3. Verifica que los estilos se mantienen de forma homogenea
Enviar actividades por correo

02. URLs y modularidad

Una URL (Uniform Resource Locator) es la dirección única que identifica a un recurso en internet, como una página web, una imagen, un archivo o un video. Se compone de dos partes, el host y la ruta. Por ejemplo www.youtube.com/feed/playlists/ se compone de www.youtube.com (el host) y /feed/playlists es la ruta.

Tradicionalmente las rutas apuntaban a un fichero en el host y ese fichero es el que se mostraba. Hoy en día la mayoría de rutas son simbólicas y no reflejan la arquitectura de ficheros y directorios real. Las rutas modernas simbolizan la jerarquía de servicios. Por ejemplo /feed/playlists indica que quiero que me muestren contenido (feed), concretamente playlists.

Con frecuencia me puedo encontrar parámetros en la URL después de un signo de interrogación. Por ejemplo: en https://www.youtube.com/watch?v=LkIJfAds4 estamos dentro de /watch y tenemos un parámetro v=LkIJfAds4, lo que le dice a youtube que el vídeo que queremos ver tiene el UID LkIJfAds4

Tarea 2

    URLs

  1. Vamos a empezar por crear namespaces para nuestras URLs, es decir, nombres cortos y fáciles de escribir, fácilmente reconocibles para los desarrolladores y que permitan identificar al servicio al que hago referencia
  2. urls.py


    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', views.homepage, name='homepage'),
        path('reservas/, include(reservas.urls)'),
    ]
    
    
  3. Añadir un argumento name a la función path le asigna un nombre que debería ser único dentro del proyecto, de tal forma que yo podría hacer lo siguiente dentro de mis HTMLs
  4. index.html


    
        <a href="{% url 'homepage' %}">Home</a>
    
    

    Django se encargará de sustituir {% url 'homepage' %} por la dirección correcta.

  5. La mejor forma de proceder, para asegurar que los nombres son realmente únicos, es crear unos namespaces organizados
  6. $APP/urls.py


    
    app_name = “$APP”
    
    urlpatterns = [
        path('', views.app_homepage, name='homepage'),
    ]
    
    
  7. Al hacer esto, para una aplicación que se llame Reservas yo podría hacer algo así como:
  8. index.html


    
        <a href="{% url 'reservas:homepage' %}">Reservas</a>
    
    
  9. A este proceso se le llama normalizar. Asegurate de que todas tus URLs estén normalizadas antes de seguir (tanto en los htmls como en el código)
  10. Parámetros

  11. Vamos a hacer una pequeña página de prueba en nuestro proyecto para hacer una demostración de parámetros. Un ejemplo bastante sencillo puede ser un calendario. Crea una aplicación calendario dentro de tu web (es probable que no te interese conservarla para tu proyecto final).
  12. Vamos a crear una página que muestre unos pocos detalles sobre la fecha que el usuario nos pase en parámetro.
  13. calendario/views.py


    
    '''
        Esta función toma como parámetro, además del request habitual, un parámetro fecha que tendrá que introducir el usuario en el formato "DD-MM-AAAA". La función está incompleta, intenta terminarla con las diferentes utilidades de python para tratar texto y fechas.
    
        Además, la función render puede tomar como parámetro un diccionario con datos para copiar dentro del html (luego veremos cómo)
    '''
    def calendario(request, fecha):
        
        [...]
    
        mi_dia = [...]
        mi_mes = [...]
        mi_ano = [...]
        mensaje = [...]
    
        return render(request, 'calendario/fecha.html', {'dia': mi_dia, 'mes': mi_mes, 'ano': mi_ano, 'mensaje': mensaje})
    
    
    

    calendario/urls.py


    
    
    urlpatterns = [
    
        #Con esta línea creamos una url genérica que va a hacer coincidencia con todas las URLs que cumplan esa forma. Por seguridad y buen funcionamiento, cuanto más genérica sea el patrón más cerca del fondo de la lista urlpatterns debería encontrarse.
        path('<str:fecha>', views.calendario, name='calendario'),
    ]
    
    

    calendario/fecha.html


    
    <p> Hoy es {{ dia }} del {{ mes }} del año {{ ano }}. {{ mensaje }}.</p>
    
    
  14. Es posible que el usuario introduzca mal el formato de fecha, prepara una página de error que mostrar si se da el caso y modifica la función de calendario para que muestre uno u otro en función de si hay un error o no.
Enviar actividades por correo

UT 4 - RA 3

Cálculos en el
backend

Objetivos de la unidad:

UT 5 - RA 4

Usuarios y
cachés

Objetivos de la unidad:

UT 6 - RA 6

POO y ORMs

Objetivos de la unidad:

UT 7 - RA 7

Servicios web y APIs

Objetivos de la unidad:

UT 8 - RA 8

Integración frontend y backend
Protocolo Websocket

Objetivos de la unidad:

UT 9 - RA 9

Bibliotecas Externas

Objetivos de la unidad:

Ejercicios Bilingües

English Sheets

UNIT 1

Vocabulary

  • Back-end: Part of an online product that runs in a server. To be considered a full back-end it should, at least: respond to requests (such as HTTP), change its behavior and store data in a permanent storage.
  • Web server: Software that responds to HTTP requests. It also runs in a server.
  • App server: Software that responds to HTTP requests and changes its behavior. It could be considered some kind of back-end.
  • Framework: Set of libraries with previously written code that streamlines the workflow.
  • HTTP: One of the many internet protocols that exist. It's a client/server text protocol with a very short lifespan.
  • Module: Piece of code that works independently and is able to communicate with other modules.
  • Interface: Piece of code that connects two different parts of an application.
  • Scalability: Property of an application that measures how easily can a project be expanded in size or in functionalities.
  • Flexibility: Property of an application that measures how easily can we modify an existing functionality.
English Sheet 1

Exercises

  1. Draw an HTTP request/response cycle that shows: A users logs in to Amazon and then searches “laptop computer”. Include requests to the database if necessary.
  2. In your own words: When is a back-end necessary?
  3. Watch this video. What are the HTTP methods? What are they for?

Writing

Make a short comparison (around 200 words) between two backend frameworks of your choice. What are they for? Where do they excel? Which languages are they written in?What is their main advantage? What are their market share?

Enviar actividades por correo

UNIT 2

Vocabulary

  • Environment variable: A dynamic value that affects the way running processes will behave on a computer. It is usually stored in the system's memory.
  • Library: A collection of pre-compiled or pre-written code that can be reused in multiple programs.
  • Settings: A collection of values that control the behavior of a program or system.
  • URL: Uniform Resource Locator, a reference to a web resource that specifies its location on a computer network and the mechanism for retrieving it.
  • Protocol: In computer science, a protocol is an established, standardized set of rules that governs how electronic devices or software programs format, transmit, receive, and interpret data
  • Import: To include a module or library in your code so you can use its functions, classes and variables.
  • Error traceback: A report generated by a programming language when an error occurs, showing the sequence of function calls that led to the error.
English Sheet 2

Exercises

  1. What's a virtual environment in python? Why is it useful?
  2. We used a couple of different commands to create and activate a virtual environment. What do they do?
  3. How do you run a Python script? (such as manage.py)
  4. How do you install a Python package in Linux? And in Windows?
  5. How do you make sure you are working within a virtual environment?

Writing

The MVC (Model-View-Controller) pattern is a software architectural pattern that separates an application into three main components: the model (data and business logic), the view (user interface), and the controller (handles user input and updates the model and view accordingly). In your own words (200 words), explain the three different languages/technologies that Django uses in this pattern and how they interact.

Enviar actividades por correo

UNIT 3

Vocabulary

  • Template: Master pattern, file or blueprint used as a guide to create identical or similar pages without starting from scratch
  • URL: (Universal Ressource Locator), text sequence that allows to unequivocally locate a file or service on the internet.
  • Slug: A Slug is the unique identifying part of a web address, typically at the end of the URL. It is human readable and helps optimize SEO
English Sheet 3

Exercises

  1. Why are templates useful?
  2. How does Django manage URL paths across applications?
  3. What is the final part of the URL called?

Writing

It is very common to have generic urls such as /product/<int:product_id>/. Describe how is this kind of slug used in Django.

Enviar actividades por correo
↑