• en
  • Language: ru
  • Documentation version: 1.1.x

Настройка приложения

Приложение Flask - это экземпляр класса Flask. Все, что касается приложения, например, конфигурация и URL, регистрируется в этом классе.

Самый простой способ создания приложения Flask - это создание глобального экземпляра Flask непосредственно в верхней части кода, как в примере «Hello, World!» на предыдущей странице. Хотя этот способ прост и полезен в некоторых случаях, он может вызвать некоторые проблемы по мере роста проекта.

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

Фабрика приложений

Пришло время начать кодирование! Создайте каталог flaskr и добавьте файл __init__.py. Файл __init__.py выполняет двойную функцию: он будет содержать фабрику приложения и сообщает Python, что каталог flaskr следует рассматривать как пакет.

$ mkdir flaskr
flaskr/__init__.py
import os

from flask import Flask


def create_app(test_config=None):
    # create and configure the app
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_mapping(
        SECRET_KEY='dev',
        DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
    )

    if test_config is None:
        # load the instance config, if it exists, when not testing
        app.config.from_pyfile('config.py', silent=True)
    else:
        # load the test config if passed in
        app.config.from_mapping(test_config)

    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass

    # a simple page that says hello
    @app.route('/hello')
    def hello():
        return 'Hello, World!'

    return app

create_app - это фабричная функция приложения. Вы будете дополнять ее позже в учебнике, но она уже многое делает.

  1. app = Flask(__name__, instance_relative_config=True) создает экземпляр Flask.

    • __name__ - это имя текущего модуля Python. Приложению необходимо знать, где он находится, чтобы установить некоторые пути, и __name__ - удобный способ сообщить ему об этом.

    • instance_relative_config=True сообщает приложению, что конфигурационные файлы находятся относительно папки instance folder. Папка экземпляра находится вне пакета flaskr и может содержать локальные данные, которые не должны быть зафиксированы в системе контроля версий, например, секреты конфигурации и файл базы данных.

  2. app.config.from_mapping() устанавливает некоторую конфигурацию по умолчанию, которую будет использовать приложение:

    • SECRET_KEY используется Flask и расширениями для обеспечения безопасности данных. Он установлен в 'dev', чтобы обеспечить удобное значение во время разработки, но при развертывании его следует переопределить на случайное значение.

    • DATABASE - это путь, по которому будет сохранен файл базы данных SQLite. Он находится в каталоге app.instance_path, который является путем, выбранным Flask для папки экземпляра. Подробнее о базе данных вы узнаете в следующем разделе.

  3. app.config.from_pyfile() переопределяет конфигурацию по умолчанию значениями, взятыми из файла config.py в папке экземпляра, если он существует. Например, при развертывании это можно использовать для установки реального SECRET_KEY.

    • test_config также можно передать фабрике, и она будет использоваться вместо конфигурации экземпляра. Это делается для того, чтобы тесты, которые вы будете писать позже в учебнике, могли быть настроены независимо от настроенных вами значений разработки.

  4. os.makedirs() гарантирует, что app.instance_path существует. Flask не создает папку экземпляра автоматически, но она должна быть создана, поскольку ваш проект будет создавать в ней файл базы данных SQLite.

  5. @app.route() создает простой маршрут, чтобы вы могли увидеть работу приложения, прежде чем перейти к остальной части учебника. Он создает соединение между URL /hello и функцией, которая возвращает ответ, в данном случае строку 'Hello, World!'.

Запустите приложение

Теперь вы можете запустить свое приложение с помощью команды flask. В терминале укажите Flask, где найти ваше приложение, а затем запустите его в режиме разработки. Помните, что вы все еще должны находиться в каталоге верхнего уровня flask-tutorial, а не в пакете flaskr.

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

Для Linux и Mac:

$ export FLASK_APP=flaskr
$ export FLASK_ENV=development
$ flask run

Для Windows cmd используйте set вместо export:

> set FLASK_APP=flaskr
> set FLASK_ENV=development
> flask run

Для Windows PowerShell используйте $env: вместо export:

> $env:FLASK_APP = "flaskr"
> $env:FLASK_ENV = "development"
> flask run

Вы увидите результат, похожий на этот:

* Serving Flask app "flaskr"
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 855-212-761

Зайдите на сайт http://127.0.0.1:5000/hello в браузере, и вы должны увидеть сообщение «Hello, World!». Поздравляем, теперь вы запустили свое веб-приложение Flask!

Продолжить Определение и доступ к базе данных.