Функции представления Flask

Функции представления — это основная часть приложения Flask; они обрабатывают запросы и генерируют ответы.

Функции представления тесно связаны с маршрутизацией: маршруты используются для сопоставления URL-адресов с конкретными функциями представления.

Далее следует подробное объяснение функций представления Flask, включая их определение, использование данных запроса, возврат ответов и обработку ошибок.

  1. Определение функции представления: Функции представления — это основная функциональность, которая обрабатывает запросы и возвращает ответы.
  2. Получение данных запроса: ИспользоватьrequestИспользуйте объект для получения параметров URL, данных формы, параметров запроса и т. д.
  3. Возврат ответа: Можно возвращать строки, HTML, JSON или пользовательские объекты ответа.
  4. Обработка запросов и ответов: Использоватьrequestобъект иmake_responseИспользуется для обработки запросов и создания пользовательских ответов.
  5. обработка ошибок: Обрабатывайте исключения внутри функций представления или используйте механизм обработки ошибок Flask.
  6. Декораторы для функций представления: Использовать@app.before_request、@app.after_requestДекораторы обрабатывают логику до и после запросов.
  7. Коды состояния, возвращаемые функциями представленияМожно указать коды состояния HTTP, чтобы указать результат обработки запроса.

1. Определение функций представления

Функция представления — это обычная функция Python, которая принимает запросы и возвращает ответы. Функции представления обычно используются вместе с маршрутами, сопоставляя URL-адреса с функциями представления через декораторы.

Пример

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return 'Hello, World!'

  • @app.route('/'): Сопоставить корневой URL/вhomeфункция представления.
  • def home()Функция представления, возвращает строку'Hello, World!'в качестве ответа.

2. Получение данных запроса

Функции представления могут получать различные типы данных запроса, включая URL-параметры, данные формы, параметры запроса и т. д.

Получение URL-параметров:

Пример

@app.route('/greet/<name>')
def greet(name):
    return f'Hello, {name}!'
  • <name>— это URL-параметр, передаваемый функции представления.greet。

Получение данных формы:

Пример

from flask import request

@app.route('/submit', methods=['POST'])
def submit():
    username = request.form.get('username')
    return f'Форма отправлена пользователем {username}!'

request.form.get('username'): Извлекает поле username из данных формы в POST-запросе.

Получение параметров запроса:

Пример

@app.route('/search')
def search():
    query = request.args.get('query')
    return f'Результаты поиска для: {query}'

request.args.get('query'): Извлекает параметр запроса query из GET-запроса.

3. Возврат ответа

Функции представления могут возвращать несколько типов ответов, включая строки, HTML, JSON или пользовательские объекты ответа.

Возврат строки:

Пример

@app.route('/message')
def message():
    return 'Это простое сообщение.'

Возврат HTML-шаблонов:

Пример

from flask import render_template

@app.route('/hello/<name>')
def hello(name):
    return render_template('hello.html', name=name)

render_template('hello.html', name=name)Отрендерить HTML-шаблон hello.html и передать переменную name в шаблон.

Возврат JSON-данных:

Пример

from flask import jsonify

@app.route('/api/data')
def api_data():
    data = {'key': 'value'}
    return jsonify(data)

jsonify(data)Преобразует словарь Python в JSON-ответ.

Возврат пользовательских объектов ответа:

Пример

from flask import Response

@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): Создайте пользовательский объект ответа и задайте заголовки ответа.

4. Обработка запросов и ответов

Функции представления могут получать доступ к объекту request и генерировать ответы на основе данных запроса. Вы можете использовать объект request для получения информации о запросе и make_response для создания пользовательских ответов.

Использование объекта request:

Пример

from flask import request

@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'): Получить информацию User-Agent из заголовков запроса.

Используйте make_response:

Пример

from flask import make_response

@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'): Создайте объект ответа и установите информацию о пользовательском заголовке.

5. Обработка ошибок

Исключения можно обрабатывать внутри функций представления, или ошибки можно обрабатывать с помощью механизма обработки ошибок Flask.

Обработка ошибок в функциях представления:

Пример

@app.route('/divide/<int:x>/<int:y>')
def divide(x, y):
    try:
        result = x / y
        return f'Результат: {result}'
    except ZeroDivisionError:
        return 'Ошибка: деление на ноль', 400

Используйте оператор try-except для обработки ошибок деления на ноль и возврата пользовательского сообщения об ошибке и кода состояния.

Глобальная обработка ошибок:

Пример

@app.errorhandler(404)
def not_found(error):
    return 'Page not found', 404

@app.errorhandler(404): Определите функцию, которая обрабатывает ошибки 404.

6. Декораторы для функций представления

Помимо @app.route, Flask также поддерживает другие декораторы для реализации более сложной функциональности.

Пример:

  • @app.before_requestФункции, которые выполняются перед обработкой каждого запроса.
  • @app.after_requestФункции, которые выполняются после обработки каждого запроса.
  • @app.teardown_requestФункции, которые выполняются после завершения запроса, используются для очистки.

Пример использования декоратора:

Пример

@app.before_request
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. Коды состояния, возвращаемые функциями представления

Функции представления могут не только возвращать содержимое, но и указывать коды состояния HTTP.

Пример

@app.route('/status')
def status():
    return 'Всё в порядке', 200

Возврат кода состояния 200 означает успешный запрос.

Возвратите объект ответа с кодом состояния:

Пример

from flask import Response

@app.route('/error')
def error():
    return Response('Произошла ошибка', status=500)

Возврат кода состояния 500 означает внутреннюю ошибку сервера.

Другие расширения