Настройка приложения¶
Приложение Flask - это экземпляр класса Flask
. Все, что касается приложения, например, конфигурация и URL, регистрируется в этом классе.
Самый простой способ создания приложения Flask - это создание глобального экземпляра Flask
непосредственно в верхней части кода, как в примере «Hello, World!» на предыдущей странице. Хотя этот способ прост и полезен в некоторых случаях, он может вызвать некоторые затруднения по мере роста проекта.
Вместо того чтобы создавать экземпляр Flask
глобально, вы будете создавать его внутри функции. Эта функция известна как фабрика приложений. Любая конфигурация, регистрация и другие настройки, необходимые приложению, будут происходить внутри функции, после чего приложение будет возвращено.
Фабрика приложений¶
Пришло время начать кодирование! Создайте каталог flaskr
и добавьте файл __init__.py
. Файл __init__.py
выполняет двойную функцию: он будет содержать фабрику приложения и сообщает Python, что каталог flaskr
следует рассматривать как пакет.
$ mkdir flaskr
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
- это фабричная функция приложения. Вы будете дополнять ее позже в учебнике, но она уже многое делает.
app = Flask(__name__, instance_relative_config=True)
создает экземплярFlask
.__name__
- это имя текущего модуля Python. Приложению необходимо знать, где он находится, чтобы установить некоторые пути, и__name__
- удобный способ сообщить ему об этом.instance_relative_config=True
сообщает приложению, что конфигурационные файлы находятся относительно папки instance folder. Папка экземпляра расположена вне пакетаflaskr
и может содержать локальные данные, которые не должны быть зафиксированы в системе контроля версий, например, секреты конфигурации и файл базы данных.
app.config.from_mapping()
устанавливает некоторую конфигурацию по умолчанию, которую будет использовать приложение:SECRET_KEY
используется Flask и расширениями для обеспечения безопасности данных. Он установлен в'dev'
, чтобы обеспечить удобное значение во время разработки, но при развертывании его следует переопределить на случайное значение.DATABASE
- это путь, по которому будет сохранен файл базы данных SQLite. Он находится в каталогеapp.instance_path
, который является путем, выбранным Flask для папки экземпляра. Подробнее о базе данных вы узнаете в следующем разделе.
app.config.from_pyfile()
переопределяет конфигурацию по умолчанию значениями, взятыми из файлаconfig.py
в папке экземпляра, если он существует. Например, при развертывании это можно использовать для установки реальногоSECRET_KEY
.test_config
также можно передать фабрике, и она будет использоваться вместо конфигурации экземпляра. Это делается для того, чтобы тесты, которые вы будете писать позже в учебнике, могли быть настроены независимо от настроенных вами значений разработки.
os.makedirs()
гарантирует, чтоapp.instance_path
существует. Flask не создает папку экземпляра автоматически, но она должна быть создана, поскольку ваш проект будет создавать в ней файл базы данных SQLite.@app.route()
создает простой маршрут, чтобы вы могли увидеть работу приложения, прежде чем перейти к остальной части учебника. Он создает соединение между URL/hello
и функцией, которая возвращает ответ, в данном случае строку'Hello, World!'
.
Запустите приложение¶
Теперь вы можете запустить свое приложение с помощью команды flask
. В терминале укажите Flask, где найти ваше приложение, а затем запустите его в режиме отладки. Помните, что вы все еще должны находиться в каталоге верхнего уровня flask-tutorial
, а не в пакете flaskr
.
Режим отладки показывает интерактивный отладчик всякий раз, когда страница вызывает исключение, и перезапускает сервер всякий раз, когда вы вносите изменения в код. Вы можете оставить его запущенным и просто перезагружать страницу браузера по мере выполнения урока.
$ flask --app flaskr run --debug
Вы увидите результат, похожий на этот:
* Serving Flask app "flaskr"
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: nnn-nnn-nnn
Зайдите на сайт http://127.0.0.1:5000/hello в браузере, и вы должны увидеть сообщение «Hello, World!». Поздравляем, теперь вы запустили свое веб-приложение Flask!
Если другая программа уже использует порт 5000, вы увидите OSError: [Errno 98]
или OSError: [WinError 10013]
при попытке запуска сервера. О том, как с этим справиться, смотрите Адрес уже используется.
Продолжить Определение и доступ к базе данных.