Первое приложение Flask

В предыдущей главе мы успешно установили Flask. Далее мы можем создать простое приложение Flask.

Сначала создайте файл с именем app.py и добавьте следующее содержимое:

Пример ( app.py )

from flask import Flask

app = Flask(__name__)

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

if __name__ == '__main__':
    app.run(debug=True)

Запустите приложение Flask из командной строки:

python app.py

Вы увидите, как запустится сервер разработки Flask и отобразит что-то вроде следующего:

...
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 977-918-914
...

Откройте браузер, перейдите по адресу http://127.0.0.1:5000/, вы должны увидеть сообщение "Hello, World!", что означает, что Flask успешно установлен и работает.

Никогда не называйте файлflask.py, это вызовет конфликт с самой библиотекой Flask и приведёт к ошибке импорта.

Анализ кода:

  • from flask import Flask: Эта строка кода изflaskимпортируется из модуляFlaskclass.FlaskКласс является ядром фреймворка Flask и используется для создания экземпляров приложения Flask.

  • app = Flask(__name__): Эта строка кода создаёт экземпляр приложения Flask.__name__— это специальная переменная Python, которая, когда модуль запускается напрямую, равна'__main__', когда он импортируется другими модулями, — это имя модуля. Передача__name__даетFlaskКонструктор позволяет приложению Flask находить и загружать файлы конфигурации.

  • @app.route('/'): Это декоратор, который сообщает Flask, какой URL должен вызывать функцию ниже. В этом примере он задает корневой URL (т. е. домашнюю страницу сайта).

  • def hello_world():: Здесь определяется функция с именемhello_worldФункция, которая будет вызвана, когда пользователь посетит корневой URL.

  • return 'Hello, World!': Эта строка кода —hello_worldВозвращаемое значение функции. Когда пользователь посетит корневой URL, эта строка будет отправлена обратно в браузер пользователя.

  • if __name__ == '__main__':: Эта строка кода — условная проверка того, запущен ли этот модуль напрямую, а не импортирован другими модулями. Если он запущен напрямую, будет выполнен следующий блок кода.

  • app.run(debug=True): Эта строка кода вызываетrunметод экземпляра приложения Flask, запускает встроенный сервер разработки Flask.debug=Trueпараметр включает режим отладки, что означает, что приложение будет автоматически перезагружаться при изменении кода, а при возникновении ошибки предоставляется отладчик.

Если вы установилиpython-dotenv, вы можете создать в каталоге проекта файл.flaskenv, упростив команду:

# 文件路径:.flaskenv
FLASK_APP=app
FLASK_DEBUG=True

После настройки просто запуститеflask run— и всё, не нужно каждый раз указывать--appпараметры:

(.venv) $ flask run
 * Serving Flask app 'app'
 * Debug mode: on
 * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)

Если вы назовёте файлapp.pyилиwsgi.py, Flask сможет автоматически его обнаружить, и даже--appможно опустить. Но явно указывать его — хорошая привычка.


Режим отладки

Во время разработки рекомендуется включить режим отладки, который предоставляет две важные возможности:

  • Автоматическая перезагрузка: После изменения и сохранения кода сервер автоматически перезапускается, без ручных действий.
  • Интерактивный отладчик: При возникновении ошибки в коде в браузере отображается подробная информация об ошибке и стек вызовов.

Как включить:

(.venv) $ flask --app app run --debug
 * Debug mode: on
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 123-456-789

Предупреждение о безопасности: Интерактивный отладчик в режиме отладки позволяет выполнять произвольный Python-код в браузере. Хотя он защищён PIN-кодом,никогда не включайте режим отладки в производственной среде。


Сравнение способов запуска

кромеflask runкоманды, вы также увидите другой способ запуска:

Пример

# Не рекомендуется: вызывать app.run() в коде
if __name__ == "__main__":
    app.run(debug=True)

Затем используйтеpython app.pyдля запуска.

Как запустить Преимущества Недостатки
flask run Поддерживает аргументы командной строки (--host, --port, --debug) с гибкой настройкой; автоматически загружает .flaskenv Нужно запоминать параметры команды
python app.py Простой и интуитивно понятный Негибко, режим отладки требует изменения кода; Flask официально не рекомендует

Flask официально рекомендует использовать командуflask run. Если вы пишете в кодеapp.run()и одновременно используетеflask run, Flask разумно проигнорирует вызовapp.run()и выведет предупреждение жёлтым текстом.


Добавьте больше содержимого в ответ

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

Пример

# Путь к файлу: app.py
from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    # Возвращает многострочный HTML, Flask автоматически устанавливает Content-Type в text/html
    return """
<h1>Добро пожаловать в EXAMPLE учебник по Flask</h1>
<p>Это веб-приложение, созданное с помощью Flask.</p>
    <ul>
<li>Изучите систему маршрутизации</li>
<li>Изучите рендеринг шаблонов</li>
<li>Изучите операции с базой данных</li>
    </ul>
    """

Перейдите по адресу http://127.0.0.1:5000/, вывод будет следующим:

Конечно, писать HTML непосредственно в коде Python быстро станет трудно поддерживать. В следующих главах мы расскажем, как использовать шаблоны, чтобы отделить HTML от кода Python.

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