Шаг 2: Код для настройки приложения

Сейчас, когда наша схема уже на месте, мы можем создать модуль приложения. Давайте назовём его flaskr.py. Мы разместим его в папке flaskr. Начнём с добавления импортирования необходимых нам модулей, а также с добавления раздела конфигурации. Для небольших приложений допустимо размещать конфигурацию прямо внутри модуля, что мы сейчас и сделаем. Однако, более прозрачным решением было бы создание отдельного файла .ini или .py и загрузка или импорт значений оттуда.

Сперва мы добавим в flaskr.py импортирование модулей:

# все импорты
import sqlite3
import os
from flask import Flask, request, session, g, redirect, url_for, abort, \
     render_template, flash

# конфигурация
DATABASE = '/tmp/flaskr.db'
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'default'

Далее, мы должны создать наше текущее приложение и инициализировать его в помощью конфигурации из того же файла, т. е. flaskr.py:

# создаём наше маленькое приложение :)
app = Flask(__name__)
app.config.from_object(__name__)

# Загружаем конфиг по умолчанию и переопределяем в конфигурации часть
# значений через переменную окружения
app.config.update(dict(
    DATABASE=os.path.join(app.root_path, 'flaskr.db'),
    DEBUG=True,
    SECRET_KEY='development key',
    USERNAME='admin',
    PASSWORD='default'
))
app.config.from_envvar('FLASKR_SETTINGS', silent=True)

Объект Config работает подобно словарю, поэтому мы можем обновлять его с помощью новых значений.

Путь к базе данных

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

По этой причине, для получения пути к приложения может быть использован атрибут app.root_path. Если одновременно использовать модуль os.path, можно легко найти все файлы. В этом примере мы поместили базу данных прямо рядом с приложением.

Для реальных рабочих приложений вместо этого рекомендуется использовать Каталоги экземпляров.

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

app.config.from_envvar(‘FLASKR_SETTINGS’, silent=True)

Просто определите переменную окружения FLASKR_SETTINGS, которая укажет, какой файл конфигурации необходимо загрузить. Опция silent просит Flask не ругаться, если вышеуказанная переменная окружения не установлена.

В добавление к сказанному, вы можете использовать метод from_object() объекта конфигурации, указавему имя импортируемого модуля. Flask проинициализирует переменную из этого модуля. Заметим, что в любом случае будут учтены только имена переменных, заданные в верхнем регистре.

SECRET_KEY нужен для обеспечения безопасности сессий на стороне клиента. Выбирайте этот ключ с умом, и настолько трудный для разгадывания и сложный, насколько это возможно. Флаг DEBUG включает или отключает интерактивный отладчик. Никогда не оставляйте режим отладки активированным при реальном использовании системы, потому что это позволит пользователям исполнять код на сервере!

Добавим также метод, который позволяет простым способом соединиться с указанной базой данных. Он может быть использован для открытия соединения по запросу, а также из интерактивной командной оболочки Python или из скрипта. Это пригодится в дальнейшем. Мы создаём простое соединение с базой данных SQLite и далее просим его использовать для представления строк объект sqlite3.Row. Это позволит нам рассматривать строки, как если бы они были словарями, а не кортежами.

def connect_db():
    """Соединяет с указанной базой данных."""
    rv = sqlite3.connect(app.config['DATABASE'])
    rv.row_factory = sqlite3.Row
    return rv

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

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

Отвлекаясь на минутку, приведём способ, которым достигается запуск приложения без каких-либо проблем - это делается с помощью следующих команд:

python flaskr.py

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

Когда вы зайдёте с помощью своего браузера на сервер, вы получите ошибку 404 (страница не найдена), так как у нас пока нет ни одного представления (view). Однако, мы сфокусируемся на этом чуть позже. Для начала мы должны добиться, чтобы заработала база данных.

Сервер, доступный из внешнего мира

Хотите, чтобы ваш сервер был публично доступным? Для получения дополнительной информации обратитесь к разделу externally visible server.

Продолжение: Шаг 3: Соединения с базой данных.

Оригинал этой страницы