Flask — это веб-фреймворк. Это означает, что Flask предоставляет вам инструменты, библиотеки и технологии, которые позволяют создать веб-приложение. Это веб-приложение может быть несколькими веб-страницами, блогом, вики или быть таким большим, как веб-приложение календаря или коммерческий веб-сайт.
Что такое Flask?
Flask — это веб-фреймворк. Это означает, что Flask предоставляет вам инструменты, библиотеки и технологии, которые позволяют создать веб-приложение. Это веб-приложение может быть несколькими веб-страницами, блогом, вики или может быть настолько большим, как веб-приложение календаря или коммерческий веб-сайт.
Flask относится к категории микро-фреймворков. Микро-фреймворки обычно имеют мало или совсем не имеют зависимостей от внешних библиотек. Это имеет свои преимущества и недостатки. Преимущества заключаются в том, что фреймворк легкий, мало зависимостей для обновления и слежения за ошибками безопасности, недостатки — иногда вам придется делать больше работы самостоятельно или увеличивать список зависимостей, добавляя плагины. В случае Flask, его зависимости следующие:
Примечание
WSGI — это в основном протокол, определенный для того, чтобы Python-приложение могло взаимодействовать с веб-сервером и, таким образом, использоваться как веб-приложение вне CGI.
Что такое шаблонизаторы?
Создавали ли вы когда-нибудь веб-сайт? Сталкивались ли вы с проблемой, что для поддержания единого стиля веб-сайта вам приходилось многократно писать один и тот же текст? Пытались ли вы когда-нибудь изменить стиль такого веб-сайта?
Если ваш веб-сайт содержит всего несколько страниц, изменение его стиля займет у вас некоторое время, но это выполнимо. Однако, если у вас много страниц (например, список товаров, которые вы продаете в своем магазине), эта задача становится непосильной.
Используя шаблоны, вы можете установить базовый макет для своих страниц и указать, какие элементы будут меняться. Таким образом, вы можете определить свой заголовок и сохранить его единообразным на всех страницах вашего веб-сайта, и если вам нужно будет изменить заголовок, вам придется обновить его только в одном месте.
Использование шаблонизатора сэкономит вам много времени при создании вашего приложения, а также при его обновлении и поддержке.
Приложение “Hello world” в Flask
Мы собираемся создать очень базовое приложение с использованием Flask.
- Создайте структуру проекта
mkdir -p hello_flask/{templates,static}
Это базовая структура вашего веб-приложения:
$ tree hello_flask/
hello_flask/
|-- static
`-- templates
Папка templates
предназначена для хранения шаблонов.
Папка static
предназначена для хранения любых файлов (изображений, CSS, JavaScript),
необходимых для веб-приложения.
- Создайте файл приложения
cd hello_flask
vim hello_flask.py
Поместите следующий код в этот файл:
#!/usr/bin/env python
import flask
APP = flask.Flask(__name__)
@APP.route('/')
def index():
""" Отображает главную страницу, доступную по адресу '/'
"""
return flask.render_template('index.html')
if __name__ == '__main__':
APP.debug=True
APP.run()
- Создайте шаблон
index.html
vim templates/index.html
Поместите следующий код в этот файл
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset="utf-8" />
<title>Hello world!</title>
<link type="text/css" rel="stylesheet"
href="{{ url_for('static',
filename='hello.css')}}" />
</head>
<body>
It works!
</body>
</html>
- Запустите приложение Flask
python hello_flask.py
Перейдите по адресу http://127.0.0.1:5000/ , это должно просто показать вам на черном фоне белым текстом надпись “It works!” (см. рисунок ниже).
Использование аргументов в Flask
В этом разделе мы рассмотрим, как использовать страницу в соответствии с URL, используемым пользователем.
Для этого мы обновим hello_flask.py
.
- Добавьте следующую запись в
hello_flask.py
@APP.route('/hello/<name>/')
def hello(name):
""" Отображает страницу, приветствующую посетителя.
"""
return flask.render_template('hello.html', name=name)
- Создайте следующий шаблон
hello.html
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset="utf-8" />
<title>Hello</title>
<link type="text/css" rel="stylesheet"
href="{{ url_for('static',
filename='hello.css')}}" />
</head>
<body>
Hello {{name}}
</body>
</html>
- Запустите приложение Flask
python hello_flask.py
Перейдите по адресу http://127.0.0.1:5000/ , это должно просто показать вам на черном фоне белым текстом “It works!”.
Перейдите по адресу http://127.0.0.1:5000/hello/you это должно вернуть вам текст “Hello you” (см. рисунок ниже).
Все, что вы поместите после /hello/
в URL, будет возвращено вам на странице.
Это ваше первое использование шаблона, мы установили переменную name
в
hello_flask.py
(см. строку возврата функции hello
). Эта
переменная затем отображается на самой странице с использованием синтаксиса {{name}}
.
Дополнительная работа
Используйте шаблоны
В настоящее время для каждой страницы мы создали шаблон, это на самом деле плохая практика, что мы должны сделать, это создать master
шаблон и иметь каждую страницу использовать его.
- Создайте шаблон
master.html
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset="utf-8" />
<title>{% block title %}{% endblock %} - Hello Flask!</title>
<link type="text/css" rel="stylesheet"
href="{{ url_for('static',
filename='hello.css')}}" />
</head>
<body>
{% block body %}{% endblock %}
</body>
</html>
- Настройте шаблон
index.html
{% extends "master.html" %}
{% block title %}Home{% endblock %}
{% block body %}
It works!
{% endblock %}
Как вы можете видеть, в шаблоне master.html
мы определили две секции, блоки которые называются title
и body
.
В шаблоне index.html
мы говорим, что этот шаблон опирается на шаблон master.html
, затем мы определяем содержимое для размещения в этих двух секциях (блоках). В первом блоке title
мы говорим, чтобы поместить слово Home, во втором блоке мы определяем, что хотим иметь в теле страницы.
- В качестве упражнения, преобразуйте другой шаблон
hello.html
для использования шаблонаmaster.html
также. - Добавьте ссылку на главную страницу со страницы hello
Flask использует специфический синтаксис для создания ссылок с одной страницы на другую. Этот факт генерирует ссылку динамически в соответствии с декоратором, установленным для функции, связанной с ней. Кроме того, он заботится о том, где развернуто приложение.
Например, если ваш сайт развернут на: /myapp/
, Flask автоматически добавит /myapp/
ко всем ссылкам без необходимости указывать это.
Для создания ссылки в шаблоне Flask использует функцию url_for()
. Эта функция принимает в качестве первого аргумента функцию, которую вы хотите вызвать (ссылку на). Следующие аргументы — это аргументы самой функции (например, аргумент name
функции hello
.
Настройте шаблон hello.html
для добавления ссылки на главную страницу
<a href="{{ url_for('index') }}"><button>Home</button></a>
- В качестве задания добавьте ссылку на страницу hello с главной страницы для вас.