Las aplicaciones web modernas utilizan URLs significativas para ayudar a los usuarios. Los usuarios tienen más probabilidades de gustar de una página y volver si la página utiliza una URL significativa que puedan recordar y utilizar para visitar directamente una página. En este laboratorio, nos centraremos en cómo implementar URLs dinámicas y adjuntar múltiples reglas a una función en Flask.
Skills Graph
%%%%{init: {'theme':'neutral'}}%%%%
flowchart RL
python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"])
python(("Python")) -.-> python/FunctionsGroup(["Functions"])
python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"])
python(("Python")) -.-> python/FileHandlingGroup(["File Handling"])
python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"])
python/BasicConceptsGroup -.-> python/strings("Strings")
python/FunctionsGroup -.-> python/function_definition("Function Definition")
python/FunctionsGroup -.-> python/keyword_arguments("Keyword Arguments")
python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules")
python/FileHandlingGroup -.-> python/with_statement("Using with Statement")
python/AdvancedTopicsGroup -.-> python/decorators("Decorators")
subgraph Lab Skills
python/strings -.-> lab-148877{{"URLs significativas para aplicaciones web dinámicas"}}
python/function_definition -.-> lab-148877{{"URLs significativas para aplicaciones web dinámicas"}}
python/keyword_arguments -.-> lab-148877{{"URLs significativas para aplicaciones web dinámicas"}}
python/importing_modules -.-> lab-148877{{"URLs significativas para aplicaciones web dinámicas"}}
python/with_statement -.-> lab-148877{{"URLs significativas para aplicaciones web dinámicas"}}
python/decorators -.-> lab-148877{{"URLs significativas para aplicaciones web dinámicas"}}
end
Decorador de ruta
En este paso, utilizará el decorador route() para enlazar múltiples funciones de vista con múltiples URLs.
Abra el archivo route_decorator.py, importe la clase Flask y cree una instancia de la misma.
from flask import Flask
app = Flask(__name__)
A continuación, usamos el decorador route() para crear dos rutas, / y /hello, enlazar las funciones de vista correspondientes, y hacer que devuelvan Página de índice y Hola, Mundo respectivamente.
Crear un punto de entrada main del script para iniciar la aplicación Flask en el puerto 5000, habilitando el modo debug.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
Para ejecutar la aplicación, primero use los siguientes comandos para lanzar la aplicación Flask en la terminal:
python3 route_decorator.py
Luego abra la pestaña "Web 5000" ubicada en la parte superior de la interfaz, actualice la página y podrá ver el mensaje Página de índice.
Para la ruta /hello, puede agregar el sufijo hello directamente en la barra de direcciones superior.
Luego la página mostrará el mensaje Hola, Mundo.
Reglas de variables
En este paso, agregará secciones variables a una URL marcando secciones con <nombre_variable>. Opcionalmente, puede usar un conversor para especificar el tipo del argumento como <conversor:nombre_variable>.
Abra el archivo variable_rules.py, primero importe la clase Flask y escape, luego cree una instancia de la clase Flask.
from flask import Flask
from markupsafe import escape
app = Flask(__name__)
En el decorador route(), agregue patrones <nombre_variable> y <conversor:nombre_variable> para crear URLs dinámicas con secciones variables. Haga que las funciones de vista devuelvan cadenas formateadas.
@app.route('/user/<username>')
def show_user_profile(username):
## muestra el perfil del usuario para ese usuario
return f'Usuario {escape(username)}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
## muestra el post con el id dado, el id es un entero
return f'Post {post_id}'
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
## muestra el subcamino después de /path/
return f'Subcamino {escape(subpath)}'
A continuación, hay una tabla de los tipos de conversores comunes:
Tipo
Rol
string
(predeterminado) acepta cualquier texto sin barra diagonal
int
acepta enteros positivos
float
acepta valores de punto flotante positivo
path
como string pero también acepta barras diagonales
uuid
acepta cadenas UUID
Crear un punto de entrada main del script para iniciar la aplicación Flask en el puerto 5001, habilitando el modo debug.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5001, debug=True)
Para ejecutar la aplicación, primero use los siguientes comandos para lanzar la aplicación Flask en una nueva terminal:
python3 variable_rules.py
Luego abra la pestaña "Web 5001" ubicada en la parte superior de la interfaz, agregue el sufijo user/Alice directamente en la barra de direcciones superior.
Luego la página mostrará el mensaje Usuario Alice.
También puede repetir las mismas operaciones para los sufijos post/1 y path/some/path. Para el sufijo post/1, muestra el mensaje Post 1. Para el sufijo path/some/path, muestra el mensaje Subcamino some/path.
Comportamiento de redirección
En este paso, aprenderá dos reglas que difieren en el uso de una barra diagonal final.
Abra el archivo redirection_behavior.py, importe la clase Flask y cree una instancia de la misma.
from flask import Flask
app = Flask(__name__)
Utilice el decorador route() para crear una ruta llamada /projects/ con una función de vista llamada projects.
@app.route('/projects/')
def projects():
return 'La página de proyectos'
La URL canónica para el punto final projects tiene una barra diagonal final. Es similar a una carpeta en un sistema de archivos. Si accede a la URL sin la barra diagonal final (/projects), Flask lo redirige a la URL canónica con la barra diagonal final (/projects/).
Cree otra ruta llamada /about con una función de vista llamada about.
@app.route('/about')
def about():
return 'La página Acerca de'
La URL canónica para el punto final about no tiene una barra diagonal final. Es similar al nombre de ruta de un archivo. Acceder a la URL con una barra diagonal final (/about/) produce un error 404 No encontrado. Esto ayuda a mantener las URLs únicas para estos recursos, lo que ayuda a los motores de búsqueda a evitar indexar la misma página dos veces.
Crear un punto de entrada main del script para iniciar la aplicación Flask en el puerto 5002, habilitando el modo debug.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5002, debug=True)
Para ejecutar la aplicación, primero use los siguientes comandos para lanzar la aplicación Flask en una nueva terminal:
python3 redirection_behavior.py
Luego abra la pestaña "Web 5002" ubicada en la parte superior de la interfaz, agregue el sufijo projects directamente en la barra de direcciones superior.
Luego la página mostrará el mensaje La página de proyectos, porque se redirige a la ruta /projects/.
Agregue otro sufijo about/ en lugar de projects:
Debería ver el mensaje No encontrado, lo que indica un error 404. Cambie el sufijo a about, luego podrá ver el mensaje correcto La página Acerca de.
Construcción de URLs
En este paso, utilizará la función url_for() para construir una URL a una función específica. Toma el nombre de la función como primer argumento y un número ilimitado de argumentos de palabras clave, cada uno correspondiente a una parte variable de la regla de URL. Las partes variables desconocidas se anexan a la URL como parámetros de consulta.
Abra el archivo url_building.py, e importe primero la clase Flask y url_for. No olvide también crear una instancia de la clase Flask.
from flask import Flask, url_for
app = Flask(__name__)
Utilice el decorador route() para crear tres rutas y definir las funciones de vista correspondientes.
Usamos el método test_request_context() para probar url_for(). Le dice a Flask que actúe como si estuviera manejando una solicitud incluso mientras usamos una shell de Python.
with app.test_request_context():
print(url_for('index'))
print(url_for('login'))
print(url_for('login', next='/'))
print(url_for('profile', username='John Doe'))
url_for('index') genera una URL para la función de vista index, resultando en /.
url_for('login') genera una URL para la función de vista login, resultando en /login.
url_for('login', next='/') genera una URL para la función de vista login y incluye un parámetro de consulta adicional next, resultando en /login?next=/.
url_for('profile', username='John Doe') genera una URL para la función de vista profile con la variable de nombre de usuario establecida en John Doe, resultando en /user/John%20Doe
Ejecute directamente el archivo url_building.py en una nueva terminal:
python3 url_building.py
debería mostrar:
/
/login
/login?next=/
/user/John%20Doe
Resumen
En este laboratorio, hemos aprendido varios métodos para crear URLs significativas, lo cual es muy importante al diseñar una aplicación web. Al utilizar habilmente las capacidades de enrutamiento de Flask, puede crear URLs organizadas e intuitivas que mejoran la experiencia del usuario.