Función de vista Flask
La función de vista es la parte central de una aplicación Flask; se encarga de manejar las solicitudes y generar las respuestas.
Las funciones de vista están estrechamente vinculadas con las rutas; a través de las rutas se asignan las URLs a funciones de vista específicas.
A continuación se ofrece una explicación detallada de las funciones de vista en Flask, incluyendo cómo definirlas, usar los datos de la solicitud, devolver respuestas y manejar errores.
- Definir la función de vista: la función de vista es la funcionalidad principal que procesa las solicitudes y devuelve respuestas.
- Recibir datos de la solicitud: usar
requestel objeto para obtener los parámetros de URL, datos de formulario, parámetros de consulta, etc. - Devolver respuesta: puede devolver cadenas, HTML, JSON u objetos de respuesta personalizados.
- Manejar solicitud y respuesta: usar
requestobjeto ymake_responsepara manejar la solicitud y generar respuestas personalizadas. - Manejar errores: manejar excepciones dentro de la función de vista o usar el mecanismo de manejo de errores de Flask.
- Decoradores de la función de vista: usar
@app.before_request、@app.after_requestdecoradores como estos para manejar la lógica antes y después de la solicitud. - Códigos de estado devueltos por la función de vista: se puede especificar un código de estado HTTP para indicar el resultado del procesamiento de la solicitud.
1. Definir la función de vista
Una función de vista es una función normal de Python que recibe la solicitud y devuelve una respuesta. Normalmente se usa junto con las rutas; mediante decoradores se asigna la URL a la función de vista.
Ejemplo
app = Flask(__name__)
@app.route('/')
def home():
return 'Hello, World!'
@app.route('/'): asignar la URL raíz/mapear ahomela función de vista.def home(): la función de vista devuelve una cadena'Hello, World!'como respuesta.
2. Recibir datos de la solicitud
La función de vista puede recibir diferentes tipos de datos de la solicitud, incluyendo parámetros de URL, datos de formulario, parámetros de consulta, etc.
Obtener parámetros de URL:
Ejemplo
def greet(name):
return f'Hello, {name}!'
<name>es un parámetro de URL que se pasa a la función de vistagreet。
Obtener datos de formulario:
Ejemplo
@app.route('/submit', methods=['POST'])
def submit():
username = request.form.get('username')
return f'Form submitted by {username}!'
request.form.get('username'): obtener el campo username de los datos de formulario en una solicitud POST.
Obtener parámetros de consulta:
Ejemplo
def search():
query = request.args.get('query')
return f'Search results for: {query}'
request.args.get('query'): obtener el parámetro de consulta query en una solicitud GET.
3. Devolver la respuesta
La función de vista puede devolver varios tipos de respuesta, como cadenas, HTML, JSON u objetos de respuesta personalizados.
Devolver una cadena:
Ejemplo
def message():
return 'This is a simple message.'
Devolver una plantilla HTML:
Ejemplo
@app.route('/hello/<name>')
def hello(name):
return render_template('hello.html', name=name)
render_template('hello.html', name=name): renderizar la plantilla HTML hello.html y pasar la variable name a la plantilla.
Devolver datos JSON:
Ejemplo
@app.route('/api/data')
def api_data():
data = {'key': 'value'}
return jsonify(data)
jsonify(data): convertir un diccionario de Python en una respuesta JSON.
Devolver un objeto de respuesta personalizado:
Ejemplo
@app.route('/custom')
def custom_response():
response = Response('Custom response with headers', status=200)
response.headers['X-Custom-Header'] = 'Value'
return response
Response('Custom response with headers', status=200): crear un objeto de respuesta personalizado y establecer las cabeceras de la respuesta.
4. Manejar la solicitud y la respuesta
La función de vista puede acceder al objeto de solicitud y generar una respuesta según los datos de la solicitud. Se puede usar el objeto request para obtener información de la solicitud y make_response para crear respuestas personalizadas.
Usar el objeto request:
Ejemplo
@app.route('/info')
def info():
user_agent = request.headers.get('User-Agent')
return f'Your user agent is {user_agent}'
request.headers.get('User-Agent'): obtener la información User-Agent de las cabeceras de la solicitud.
Usar make_response:
Ejemplo
@app.route('/header')
def custom_header():
response = make_response('Response with custom header')
response.headers['X-Custom-Header'] = 'Value'
return response
make_response('Response with custom header'): crear un objeto de respuesta y establecer cabeceras personalizadas.
5. Manejar errores
Se pueden manejar excepciones o errores dentro de la función de vista, o mediante el mecanismo de manejo de errores que proporciona Flask.
Manejar errores dentro de la función de vista:
Ejemplo
def divide(x, y):
try:
result = x / y
return f'Result: {result}'
except ZeroDivisionError:
return 'Error: Division by zero', 400
Usar la declaración try-except para manejar el error de división por cero y devolver un mensaje de error personalizado y un código de estado.
Manejo global de errores:
Ejemplo
def not_found(error):
return 'Page not found', 404
@app.errorhandler(404): definir una función que maneje el error 404.
6. Decoradores de la función de vista
Además de @app.route, Flask admite otros decoradores para implementar funciones más complejas.
Ejemplo:
@app.before_request: función que se ejecuta antes de cada solicitud.@app.after_request: función que se ejecuta después de cada solicitud.@app.teardown_request: función que se ejecuta al finalizar la solicitud, para tareas de limpieza.
Ejemplo de uso de decoradores:
Ejemplo
def before_request():
print('Before request')
@app.after_request
def after_request(response):
print('After request')
return response
@app.teardown_request
def teardown_request(exception):
print('Teardown request')
7. Códigos de estado devueltos por la función de vista
La función de vista no solo puede devolver contenido, sino también especificar el código de estado HTTP.
Ejemplo
def status():
return 'Everything is OK', 200
Devolver el código de estado 200 indica que la solicitud fue exitosa.
Devolver un objeto de respuesta con código de estado:
Ejemplo
@app.route('/error')
def error():
return Response('An error occurred', status=500)
Devolver el código de estado 500 indica un error interno del servidor.
Otras extensiones