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.

🔔 Следите за нами: Твиттер | Линкедин | "Новостная рассылка"

🧠 Инструменты ИИ ⇒ Стань инженером по ИИ