Flask — это популярный веб-фреймворк для Python, который обеспечивает быструю и простую разработку веб-приложений.
Ниже приведены 30 основных элементов, необходимых для быстрого начала разработки веб-приложений и API с помощью flask:
1. Установка
Чтобы начать использовать Flask, необходимо установить его с помощью команды pip
, которая служит менеджером пакетов Python. Откройте терминал или командную строку и введите следующую команду:
pip install flask
2. Базовое приложение
Самый простой метод создания приложения Flask включает импорт класса Flask
из модуля flask
и последующее создание его экземпляра. Следующий фрагмент кода иллюстрирует создание базового приложения Flask, которое отвечает «Hello, World!». при посещении корневого URL-адреса (/
):
from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "Hello, World!"
3. Маршрутизация
Маршрутизация включает в себя процесс связывания URL-адресов с функциями, обрабатывающими входящие запросы. Использование декоратора app.route
позволяет указывать отдельные URL-адреса для различных функций. Следующий фрагмент кода иллюстрирует создание функции, которая возвращает «Это страница маршрута!». когда пользователь переходит по URL-адресу /route
:
@app.route('/route') def route(): return "This is the route page!"
4. Переменные в маршрутах
Flask позволяет вам создавать динамические URL-адреса, которые принимают ввод пользователя посредством использования переменных в маршрутах. Переменные можно определять в URL-адресах с помощью угловых скобок (< >
), а затем передавать их в качестве аргументов соответствующим функциям. Следующий фрагмент кода демонстрирует функцию, которая возвращает «Пользователь: имя пользователя» при посещении URL-адреса /user/username
, где username
может быть любой строкой:
@app.route('/user/<username>') def user(username): return f"User: {username}"
5. HTTP-методы
Методы HTTP определяют различные типы запросов, которые клиенты могут отправлять серверам, включая GET, POST, PUT, DELETE и другие. Параметр methods
в декораторе app.route
позволяет указать поддерживаемые методы для функции. Кроме того, атрибут request.method
может использоваться для определения метода, используемого клиентом. В следующем фрагменте кода показано создание функции, которая выдает разные сообщения в зависимости от того, было ли отправлено пользователем сообщение через POST или GET:
from flask import request @app.route('/submit', methods=['GET', 'POST']) def submit(): if request.method == 'POST': return "You submitted via POST" else: return "You submitted via GET"
6. Шаблоны
Шаблоны представляют собой HTML-файлы, которые могут включать заполнители для переменных и выражений, которые затем заменяются фактическими значениями при рендеринге Flask. Функция render_template
из модуля flask
служит для визуализации шаблонов и передачи любых необходимых аргументов. Крайне важно размещать шаблоны в подпапке templates
каталога вашего приложения. Следующий фрагмент кода иллюстрирует функцию, которая отображает шаблон с именем template.html
при передаче аргумента title
:
from flask import render_template @app.route('/template') def render_template(): title = "Welcome to Flask" return render_template('template.html', title=title)
7. Статические файлы
Статические файлы включают в себя нединамически генерируемые файлы, такие как изображения, CSS и JavaScript. Для обслуживания статических файлов необходимо хранить их в каталоге с именем static
в папке вашего приложения. Вызвав функцию url_for
из модуля flask
и указав имя файла в качестве аргумента, можно сгенерировать URL-адреса для статических файлов. Следующий фрагмент кода поясняет привязку файла CSS с именем style.css
к вашему шаблону:
from flask import url_for @app.route('/static') def static(): css_url = url_for('static', filename='style.css') return f'<link rel="stylesheet" href="{css_url}">'
8. Формы
Формы, содержащие элементы HTML, позволяют пользователям вводить и отправлять данные в ваше приложение. Атрибут request.form
из модуля flask
облегчает доступ к данным, отправленным пользователем. Важно определить метод (POST или GET) и действие (URL-адрес для отправки данных) внутри элемента формы вашего шаблона. Следующий фрагмент кода демонстрирует функцию, которая обрабатывает форму входа и возвращает введенное имя пользователя:
@app.route('/login', methods=['POST']) def login(): username = request.form['username'] return f"Welcome, {username}!"
9. Обработка перенаправлений и ошибок в Flask
Эффективное решение различных сценариев в вашем приложении Flask, таких как перенаправление или отображение сообщений об ошибках, имеет решающее значение для создания надежного веб-приложения.
Чтобы перенаправить пользователей на альтернативные URL-адреса, функция redirect
в модуле Flask оказывается неоценимой. Эта функция формулирует ответ, направляющий браузер на указанный URL-адрес. Вот пример его использования:
from flask import Flask, redirect app = Flask(__name__) @app.route('/') def home(): return redirect('/route') @app.route('/route') def route(): return 'Welcome to the route page!'
В предоставленном фрагменте кода доступ к корневому URL-адресу '/'
инициирует перенаправление на URL-адрес '/route'
.
10. Обработка ошибок
Управление ошибками в вашем приложении Flask включает использование функции abort
из модуля Flask. Эта функция вызывает исключение, которое впоследствии обрабатывается обработчиком ошибок. Следующий экземпляр демонстрирует обработку ошибки 404 (страница не найдена):
from flask import Flask, abort app = Flask(__name__) @app.errorhandler(404) def page_not_found(error): return 'Oops! Page not found.', 404
На этой иллюстрации функция page_not_found
, украшенная декоратором @app.errorhandler(404)
, берет на себя ответственность за 404 ошибки. Когда возникает такая ошибка, Flask вызывает эту функцию для отображения персонализированного сообщения об ошибке.
11. Создание URL
Динамическая генерация URL-адресов, функция Flask, упрощает создание URL-адресов для функций без жесткого кодирования. Функция url_for
, доступная в Flask, выполняет эту задачу. Вот пример:
from flask import Flask, url_for app = Flask(__name__) @app.route('/') def home(): url = url_for('route_function', param='value') return f'The URL is: {url}' @app.route('/route') def route_function(): return 'Welcome to the route function!'
В этом случае функция url_for
создает URL-адрес для route_function
вместе с параметром с именем param
и значением 'value'
.
12. Обработка объектов запроса
Объект request
внутри Flask инкапсулирует информацию о входящих клиентских запросах, охватывающих заголовки, файлы cookie, данные форм и многое другое. Использование объекта request
в ваших функциях позволяет манипулировать этими данными. Рассмотрим этот пример:
from flask import Flask, request app = Flask(__name__) @app.route('/') def home(): user_agent = request.headers.get('User-Agent') return f'User-Agent: {user_agent}'
На этом рисунке доступ к корневому URL-адресу '/'
дает заголовок пользовательского агента из запроса.
13. Использование шаблонов с переменными
Включение переменных из функций в ваш HTML-код упрощается с помощью шаблонов внутри Flask. Фигурные скобки {{ }}
облегчают вставку переменных в шаблоны, и они заменяются соответствующими значениями при рендеринге Flask. Рассмотрим следующий пример:
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def home(): name = 'John' return render_template('index.html', name=name)
Здесь функция render_template
отображает шаблон index.html
, предоставляя переменную name
, имеющую значение 'John'
.
14. Условные операторы в шаблонах
Шаблоны Flask включают условные операторы, которые управляют потоком HTML-кода на основе определенных условий. Эти шаблоны используют синтаксис Jinja2, аналогичный Python, для создания условных конструкций. Рассмотрим этот пример:
{% if condition %} <p>This is displayed if the condition is true.</p> {% else %} <p>This is displayed if the condition is false.</p> {% endif %}
На этой иллюстрации блок {% if condition %}
выполняется, когда условие истинно, а блок {% else %}
вступает в действие, когда условие ложно.
15. Циклическое использование шаблонов
Шаблоны Flask легко допускают итерацию по последовательностям, таким как списки или словари. Используя синтаксис Jinja2, аналогичный Python, шаблоны могут реализовывать циклы. Рассмотрим этот пример:
{% for item in items %} <li>{{ item }}</li> {% endfor %}
Здесь блок {% for item in items %}
перебирает каждый элемент в последовательности items
, заменяя значение каждого элемента выражением {{ item }}
.
16. Flash-сообщения
Flash-сообщения — это временные сообщения, отображаемые пользователям после определенных действий, таких как вход в систему или отправка форм. Flask представляет функцию flash
для хранения сообщений и дополнительных категорий внутри сеанса. Получение и отображение флэш-сообщений в шаблонах осуществляется с помощью функции get_flashed_messages
. Рассмотрим этот пример:
from flask import Flask, flash, render_template, redirect, url_for app = Flask(__name__) app.secret_key = 'your_secret_key' @app.route('/') def home(): flash('Welcome back!', 'success') return redirect(url_for('user')) @app.route('/user') def user(): messages = get_flashed_messages() return render_template('user.html', messages=messages)
На этом рисунке при доступе к корневому URL-адресу '/'
отображается сообщение об успехе 'Welcome back!'
, после чего пользователь перенаправляется на URL-адрес '/user'
. Функция get_flashed_messages
в шаблоне user.html
отвечает за получение и отображение флэш-сообщений.
17. Ответы в формате JSON:
Ответы JSON часто используются в веб-разработке для передачи структурированных данных с сервера клиенту. Этот формат позволяет легко анализировать и использовать данные на стороне клиента. Flask использует функцию jsonify
для генерации ответов JSON. Эта функция принимает словарь Python в качестве входных данных и преобразует его в строку JSON.
from flask import jsonify @app.route('/json_response') def json_response(): data = {'key': 'value'} return jsonify(data)
18. Функции запроса до и после:
Функции до и после запроса во Flask облегчают выполнение кода до и после каждого запроса к вашему приложению. Функция before_request
вызывается перед каждым запросом, а функция after_request
выполняется после каждого запроса. Функция after_request
принимает ответ в качестве входных данных и может изменить или улучшить его перед отправкой обратно клиенту.
@app.before_request def before_request(): # code here @app.after_request def after_request(response): # code here return response
19. Пользовательские страницы ошибок:
Пользовательские страницы ошибок позволяют настроить обработку и отображение ошибок в вашем приложении. В Flask вы можете создавать собственные обработчики ошибок для определенных кодов ошибок HTTP. Декоратор errorhandler
используется для определения функции, которая управляет конкретным кодом ошибки. Функция должна возвращать объект ответа, содержащий соответствующий код ошибки и любое настроенное содержимое страницы ошибки.
@app.errorhandler(404) def page_not_found(error): return render_template('404.html'), 404
20. Чертежи:
Чертежи внутри Flask позволяют организовать модульное приложение. Схема определяет маршруты, шаблоны и статические файлы, которые можно зарегистрировать в вашем приложении. Это помогает создавать повторно используемые компоненты, которые можно интегрировать в разные разделы вашего приложения. Чтобы создать схему элементов, создайте экземпляр класса Blueprint
и укажите его имя и имя импорта.
from flask import Blueprint blueprint = Blueprint('blueprint_name', __name__) @blueprint.route('/blueprint_route') def blueprint_function(): # code here
21. Динамическое создание URL-адресов:
Динамическое создание URL-адресов упрощает создание URL-адресов с параметрами или маршрутами, определенными в схемах. Flask предоставляет функцию url_for
для динамического создания URL-адресов. Вы можете передать имя конечной точки и любые необходимые параметры функции url_for
.
from flask import Flask, url_for app = Flask(__name__) @app.route('/') def index(): return "Hello, this is the homepage!" @app.route('/user/<username>') def show_user_profile(username): return f"User: {username}" #html template <a href="{{ url_for('index') }}">Home</a> <a href="{{ url_for('show_user_profile', username='john') }}">John's Profile</a> #end of template #Using url_for in Python code: home_url = url_for('index') user_url = url_for('show_user_profile', username='john')
22. HTTP-перенаправления:
HTTP-перенаправления перенаправляют клиентов на разные URL-адреса. В Flask функция redirect
используется для перенаправления HTTP. Эта функция принимает URL-адрес в качестве входных данных и возвращает клиенту ответ о перенаправлении.
from flask import redirect @app.route('/redirect_example') def redirect_example(): return redirect('http://www.example.com')
23. Работа с файлами cookie:
Файлы cookie — это небольшие фрагменты данных, сохраняемые веб-браузером на стороне клиента. Flask предоставляет механизмы для установки и получения файлов cookie. Метод set_cookie
объекта ответа устанавливает файл cookie с определенным именем и значением. Метод get_cookie
объекта запроса получает значение файла cookie по его имени.
from flask import request, make_response @app.route('/set_cookie') def set_cookie(): resp = make_response('Cookie set') resp.set_cookie('cookie_name', 'cookie_value') return resp @app.route('/get_cookie') def get_cookie(): cookie_value = request.cookies.get('cookie_name') return f'Cookie Value: {cookie_value}'
24. Пользовательские обработчики ошибок:
Пользовательские обработчики ошибок позволяют персонализировать обработку определенных кодов ошибок в вашем приложении Flask. Вы можете определить собственные обработчики ошибок для различных кодов ошибок HTTP, используя декоратор errorhandler
. Функция должна возвращать объект ответа с соответствующим кодом ошибки и любым настроенным содержимым страницы ошибки.
@app.errorhandler(500) def internal_server_error(error): return 'Internal Server Error', 500
25. Пользовательские декораторы:
Пользовательские декораторы в Flask позволяют изменять поведение функции представления, добавляя в нее дополнительные функции. Декораторы — это функции, которые принимают на вход другую функцию и возвращают модифицированную версию этой функции. В примере декоратор @custom_decorator
применяется к функции просмотра decorated_route
.
def custom_decorator(func): @wraps(func) def wrapper(*args, **kwargs): # code here return func(*args, **kwargs) return wrapper @app.route('/decorated') @custom_decorator def decorated_route(): # code here
26. Контекстные процессоры:
Объяснение: Контекстные процессоры во Flask позволяют вставлять переменные в контекст всех шаблонов. Контекстный процессор — это функция, которая возвращает словарь переменных, доступных в контексте шаблона. Декоратор @app.context_processor
регистрирует функцию как контекстный процессор.
@app.context_processor def inject_variables(): variable = 'value' return dict(variable=variable)
27. Загрузка файлов:
Объяснение: Загрузка файлов — обычная функция веб-приложений. В Flask обработка загрузки файлов включает использование объекта request.files
для доступа к загруженным файлам. Определите маршрут, который принимает запросы POST, и получите доступ к загруженному файлу с помощью request.files['file']
.
from flask import request @app.route('/upload', methods=['POST']) def upload_file(): file = request.files['file'] # code to save the file
28. Схема с префиксом URL:
Объяснение: схемы элементов с префиксами URL-адресов позволяют вам определить общий префикс для всех маршрутов в схеме элементов. Это полезно для группировки связанных маршрутов по определенному префиксу URL-адреса. Чтобы создать схему элементов с префиксом URL-адреса, передайте аргумент url_prefix
при создании схемы элементов.
blueprint = Blueprint('blueprint_name', __name__, url_prefix='/prefix') @blueprint.route('/route_inside_prefix') def route_inside_prefix(): # code here
29. RESTful API с Flask-RESTful:
Flask-RESTful упрощает создание API-интерфейсов RESTful в приложениях Flask. Он предоставляет классы и декораторы для определения ресурсов и соответствующих им методов HTTP. Чтобы создать RESTful API с помощью Flask-RESTful, создайте подкласс класса Resource
и определите поддерживаемые методы HTTP.
from flask_restful import Resource, Api api = Api(app) class HelloWorld(Resource): def get(self): return {'message': 'Hello, World!'} api.add_resource(HelloWorld, '/hello')
30. Работа с сессиями
Сеансы облегчают хранение данных по последовательным запросам от конкретного пользователя. Объект session
, предлагаемый Flask, предоставляет доступ к данным сеанса и манипулирование ими. Прежде чем использовать сеансы, необходимо определить секретный ключ для вашего приложения Flask с помощью атрибута app.secret_key
. Рассмотрим следующий пример:
from flask import Flask, session app = Flask(__name__) app.secret_key = 'your_secret_key' @app.route('/') def home(): session['username'] = 'John' return 'Session data set.' @app.route('/user') def user(): username = session.get('username') return f'Welcome, {username}!'
В этом случае доступ к корневому URL-адресу '/'
инициализирует данные сеанса с помощью ключа 'username'
и значения 'John'
. При посещении URL-адреса '/user'
впоследствии извлекается имя пользователя из сеанса и отображается персонализированное сообщение.
Заключение
Эти примеры дают представление о различных методах и функциях, предоставляемых Flask для повышения мощности и гибкости вашего веб-приложения. Опираясь на эти основополагающие фрагменты, вы можете расширить возможности своего приложения Flask.
Повышение уровня кодирования
Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:
- 👏 Аплодируйте истории и подписывайтесь на автора 👉
- 📰 Дополнительную информацию смотрите в публикации Level Up Coding.
🔔 Следите за нами: Твиттер | Линкедин | "Новостная рассылка"
🧠 Инструменты ИИ ⇒ Стань инженером по ИИ