Giter Club home page Giter Club logo

x-serv-18.1-practica1's Introduction

X-Serv-18.1-Practica1

Práctica 1 (Ejercicio 18.1): Web acortadora de URLs

Enunciado

Esta práctica tendrá como objetivo la creación de una aplicación web simple para acortar URLs. La aplicación tendrá que realizarse según un esquema de clases similar al explicado en clase.

El funcionamiento de la aplicación será el siguiente:

  • Recurso /, invocado mediante GET. Devolverá una página HTML con un formulario. En ese formulario se podrá escribir una url, que se enviará al servidor mediante POST. Además, esa misma página incluirá un listado de todas las URLs reales y acortadas que maneja la aplicación en este momento.
  • Recurso /, invocado mediante POST. Si el comando POST incluye una qs (query string) que corresponda con una url enviada desde el formulario, se devolverá una página HTML con la url original y la url acortada (ambas como enlaces pinchables), y se apuntará la correspondencia (ver más abajo).

    Si el POST no trae una qs que se haya podido generar en el formulario, devolverá una página HTML con un mensaje de error.

    Si la URL especificada en el formulario comienza por http:// o https://, se considerará que ésa es la URL a acortar. Si no es así, se le añadirá http:// por delante, y se considerará que esa es la url a acortar. Por ejemplo, si en el formulario se escribe http://gsyc.es, la url a acortar será http://gsyc.es. Si se escribe gsyc.es, la URL a acortar será http://gsyc.es.

    Para determinar la URL acortada, utilizará un número entero secuencial, comenzando por 0, para cada nueva petición de acortamiento de una URL que se reciba. Si se recibe una petición para una URL ya acortada, se devolverá la URL acortada que se devolvió en su momento.

    Así, por ejemplo, si se quiere acortar

    http://docencia.etsit.urjc.es

    y la aplicación está en el puerto 1234 de la máquina localhost, se invocará (mediante POST) la URL

    http://localhost:1234/

    y en el cuerpo de esa petición HTTP irá la qs

    url=http://docencia.etsit.urjc.es

    si el campo donde el usuario puede escribir en el formulario tiene el nombre URL. Normalmente, esta invocación POST se realizará rellenando el formulario que ofrece la aplicación.

    Como respuesta, la aplicación devolverá (en el cuerpo de la respuesta HTTP) la URL acortada, por ejemplo

    http://localhost:1234/3

    Si a continuación se trata de acortar la URL

    http://docencia.etsit.urjc.es/moodle/course/view.php?id=25

    mediante un procedimiento similar, se recibirá como respuesta la URL acortada

    http://localhost:1234/4

    Si se vuelve a intentar acortar la URL

    http://docencia.etsit.urjc.es

    como ya ha sido acortada previamente, se devolverá la misma URL corta:

    http://localhost:1234/3

  • Recursos correspondientes a URLs acortadas. Estos serán números con el prefijo /. Cuando la aplicación reciba un GET sobre uno de estos recursos, si el número corresponde a una URL acortada, devolverá un HTTP REDIRECT a la URL real. Si no la tiene, devolverá HTTP ERROR Recurso no disponible.

    Por ejemplo, si se recibe

    http://localhost:1234/3

    la aplicación devolverá un HTTP REDIRECT a la URL

    http://docencia.etsit.urjc.es

Comentarios de implementación

Se recomienda utilizar la clase webApp del fichero webapp.py, heredando de la misma. La funcionalidad de esta práctica debería implementarse en el fichero practica1.py.

Se recomienda utilizar dos diccionarios para almacenar las URLs reales y los números de las URLs acortadas. En uno de ellos, la clave de búsqueda será la URL real, y se utilizará para saber si una URL real ya está acortada, y en su caso saber cuál es el número de la URL corta correspondiente.

En el otro diccionario la clave de búsqueda será el número de la URL acortada, y se utilizará para localizar las URLs reales dadas las cortas. De todas formas, son posibles (e incluso más eficientes) otras estructuras de datos.

Se recomienda realizar la aplicación en varios pasos:

  1. Comenzar por reconocer GET /, y devolver el formulario correspondiente.
  2. Reconocer POST /, y devolver la página HTML correspondiente (con la URL real y la acortada).
  3. Reconocer GET /num (para cualquier número num), y realizar la redirección correspondiente.
  4. Manejar las condiciones de error y realizar el resto de la funcionalidad.

Entrega

Has de tener un repositorio llamado X-Serv-18.1-Practica1 en tu cuenta en GitHub que incluya el fichero de nombre 'practica1.py' que contenga las instrucciones en Python para solucionar el ejercicio.

Se proporciona un script, check.py, para comprobar la entrega correcta del ejercicio. El script de comprobación se ha de ejecutar desde terminal pasándole como parámetro tu nombre de usuario en GitHub. Así, un ejemplo de ejecución sería:

$ python check.py gregoriorobles

x-serv-18.1-practica1's People

Contributors

gregoriorobles avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.