Este artículo explorará los servicios web de Python Flask en detalle. Primero presentaré brevemente Flask y luego introduciré gradualmente conceptos avanzados como enrutamiento, plantillas, procesamiento de formularios e integración de bases de datos en Flask. El objetivo es permitir que todos entiendan y dominen las habilidades de usar Flask para crear aplicaciones web dinámicas.
1. Introducción al matraz
Flask es un marco de aplicación web de interfaz de puerta de enlace de servidor web (WSGI) ligero. Está diseñado para ser fácil de usar, pero también proporciona extensibilidad, y los usuarios pueden elegir libremente con qué bibliotecas de terceros integrarlo. Flask es un marco "micro", lo que significa que su funcionalidad principal es muy limitada, pero se puede mejorar a través de una serie de extensiones.
Echemos un vistazo a cómo crear una aplicación Flask simple.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
En este código, primero importamos el módulo Flask y creamos una instancia de servidor web Flask. Luego, definimos una ruta, es decir /
. Esta ruta está asignada a una función hello_world
que devuelve la cadena '¡Hola, mundo!' cuando el usuario visita esta URL.
2. Enrutamiento de matraces
app.route
Flask hace que la definición de rutas sea simple y fácil al proporcionar decoradores . Pero, ¿sabía que también podemos app.add_url_rule
agregar rutas directamente a través de métodos? Este enfoque proporciona más flexibilidad, por ejemplo, se pueden agregar diferentes métodos HTTP a la ruta.
def hello():
return "Hello, World!"
app.add_url_rule('/', 'hello', hello)
En el código anterior, app.add_url_rule
el primer parámetro de es la regla de URL, el segundo parámetro es el alias de la función y el tercer parámetro es la función que se va a asignar.
3. Plantillas de matraces
Flask utiliza la biblioteca de plantillas jinja2. Esta biblioteca es muy poderosa y le permite incrustar código Python en HTML. El siguiente ejemplo muestra cómo usar plantillas en una aplicación Flask:
from flask import render_template
@app.route('/hello/<name>')
def hello(name):
return render_template('hello.html', name=name)
render_template
Función utilizada para renderizar una plantilla. Recibe el nombre de la plantilla y algunas variables de plantilla como argumentos y devuelve el contenido HTML generado. En las plantillas, puede usar {
{ name }}
para mostrar el valor de una variable.
4. Procesamiento de formularios de matraces
Flask-WTF es una biblioteca de extensión para manejar formularios web en Flask. Se basa en WTF Python, una biblioteca de Python para trabajar con datos de formularios. Flask-WTF también cuenta con protección CSRF (Cross-Site Request Forgery).
nos deja
Mira un ejemplo sencillo:
from flask import request
from flask_wtf import FlaskForm
from wtforms import StringField
class MyForm(FlaskForm):
name = StringField('name')
@app.route('/submit', methods=('GET', 'POST'))
def submit():
form = MyForm()
if form.validate_on_submit():
return 'Hello, %s' % form.name.data
return render_template('submit.html', form=form)
En este ejemplo, definimos una clase de formulario MyForm
con un name
campo. Luego, submit
creamos una instancia de esta clase en la ruta y verificamos si el formulario pasa la validación. Si el formulario es válido, devolvemos un mensaje de bienvenida; de lo contrario, representamos una plantilla de formulario.
5. Integración de la base de datos Flask
Flask-SQLAlchemy es una biblioteca de extensión que proporciona compatibilidad con SQLAlchemy para aplicaciones Flask. SQLAlchemy es una herramienta ORM (Asignación relacional de objetos) en Python que puede asignar clases a tablas de bases de datos.
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:tmp/test.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
def __repr__(self):
return '<User %r>' % self.username
En este ejemplo, primero configuramos la URL de la base de datos y luego creamos una SQLAlchemy
instancia. A continuación, definimos una User
clase que hereda db.Model
y tiene dos propiedades: id
y username
. Ambas propiedades son columnas de la tabla de la base de datos.
6. Cree una API RESTful con Flask
Flask-RESTful es una extensión que vale la pena conocer al crear API web. Proporciona una manera fácil de crear rápidamente API REST. Puede implementar recursos de API definiendo clases de Python y asignar métodos HTTP (como GET, POST) a métodos de la clase.
from flask_restful import Resource, Api
api = Api(app)
class HelloWorld(Resource):
def get(self):
return {'hello': 'world'}
api.add_resource(HelloWorld, '/')
En el código anterior, primero creamos un objeto Api, luego definimos una clase de recursos e implementamos un método HelloWorld
en esta clase . get
Finalmente, api.add_resource
vinculamos HelloWorld
la clase a /
la URL usando .
7. Plano del matraz
La función de blueprint de Flask nos permite organizar aplicaciones más grandes y complejas. Puede pensar en un blueprint como un subconjunto de una aplicación Flask que puede tener sus propias rutas, plantillas y archivos estáticos.
Aquí hay un ejemplo simple:
from flask import Blueprint
simple_page = Blueprint('simple_page', __name__)
@simple_page.route('/<page>')
def show(page):
return 'Page %s' % page
En este ejemplo, primero creamos un simple_page
plano llamado y luego definimos una ruta para este plano show
.
8. Manejo de errores de matraces
Flask nos permite personalizar la función de manejo de errores, cuando ocurre un error HTTP específico, podemos devolver una respuesta personalizada. Aquí hay un ejemplo de cómo definir un controlador personalizado para errores 404:
@app.errorhandler(404)
def page_not_found(error):
return 'This page does not exist', 404
En este ejemplo, usamos app.errorhandler
un decorador para registrar una nueva función de manejo de errores. Cuando se produce un error 404, devolverá un mensaje de error personalizado.
9. Gancho de solicitud de petaca
Flask proporciona varios decoradores que podemos usar para registrar funciones que se llaman en diferentes etapas del procesamiento de una solicitud. Estos decoradores incluyen before_first_request
, before_request
y after_request
.teardown_request
@app.before_request
def before_request():
print("This is executed BEFORE each request.")
En este ejemplo, before_request
la función del decorador se ejecutará antes de cada solicitud.
10. Cookies y sesiones en frasco
En el desarrollo web, a menudo necesitamos almacenar información del usuario, como las preferencias del usuario o el estado de inicio de sesión. Flask proporciona dos formas de realizar esta tarea, Cookies y Sesiones.
Aquí hay un ejemplo de cómo configurar y leer cookies en Flask:
@app.route('/set')
def setcookie():
resp = make_response('Setting cookie!')
resp.set_cookie('username', 'the username')
return resp
@app.route('/get')
def getcookie():
username = request.cookies.get('username')
return 'The username is ' + username
En el ejemplo anterior, setcookie
la ruta establece una cookie llamada username
y getcookie
la ruta lee y devuelve el valor de esta cookie.
Una cosa más
El cliente de prueba de Flask nos permite simular el envío de solicitudes a nuestra aplicación y ver las respuestas.
def test_index():
client = app.test_client()
response = client.get('/')
assert response.status_code == 200
En el código anterior, primero creamos un cliente de prueba. Luego, usamos este cliente para enviar una solicitud GET a /
la URL y, finalmente, verificamos si el código de estado de la respuesta es 200.
Esta es solo la punta del iceberg de las poderosas funciones de Flask. El encanto de Flask es mucho más que eso. También tiene muchas extensiones ricas, como Flask-Login para manejar la autenticación de usuarios, Flask-Mail para enviar correos electrónicos y Flask- Migrar para procesar bases de datos, migración, etc.
Si es útil, preste más atención a la cuenta pública personal de WeChat: [Perspectiva completa de Python] TeahLead_KrisChang, más de 10 años de experiencia en la industria de Internet e inteligencia artificial, más de 10 años de experiencia en tecnología y gestión de equipos comerciales, Tongji Software Licenciado en Ingeniería, Máster en Gestión de Ingeniería de Fudan, Arquitecto sénior de servicios en la nube certificado por Aliyun, Jefe de negocio de productos de IA con cientos de millones de ingresos.