Flask — конфигурационные файлы

Admin Flask

Несколько способов использования различных конфигураций настроек сервера для Flask.

Вариант 1: как в официальной доке

С советами в официальной части можно ознакомиться здесь.

В официальной инструкции, помимо прочего, дают рекомендации делать через смену конфигураций:

def create_app():
    app = Flask(__name__)

    # app.config.from_object('config.DevelopmentConfig')
    app.config.from_object('config.ProductionConfig')

    return app

Минус такого подхода в заливке. Перед отправкой изменений на сервер придется постоянно комментировать/раскомментировать код.

Вариант 2: делим конфиги на две части

Разделить конфиги на 2 части:

def create_app():
    app = Flask(__name__)

    app.config.from_object(Config)
    app.config.from_pyfile('../config-extended.py')

    return app

ploshadka.net/config.py — этот файл нужно создать самостоятельно на сервере, потому что там важная секретная информация. И такой же создаем у себя на локальном компьютере. А если нужно, также и на тестовом.

ploshadka.net/config-extended.py — этот файл будет у нас отправляться в git и здесь ничего важного с точки зрения безопасности.

Теперь в зависимости от нахождения кода будет подтягиваться разная конфигурация сервера.

Содержимое файла config.py может быть таким:

import os

class Config(object):
    DEBUG = True
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'fsdkfd32r234fsdf'
    SQLALCHEMY_DATABASE_URI = 'postgresql://localhost/db_name'

    ################
    # Flask-Security
    ################

    SECURITY_PASSWORD_HASH = "pbkdf2_sha512"
    SECURITY_PASSWORD_SALT = "fsdfdfsdfdfsdafds"

На сервере тот же файл:

import os

class Config(object):
    DEBUG = False
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'fsDFKsmf923jnagd'
    SQLALCHEMY_DATABASE_URI = 'postgresql://user:pass/db_name'
    SQLALCHEMY_TRACK_MODIFICATIONS = False

    ################
    # Flask-Security
    ################

    SECURITY_PASSWORD_HASH = "pbkdf2_sha512"
    SECURITY_PASSWORD_SALT = "fsdfk3fsdDFFdfsr0fsa"

Следует отметить, что такие данные как SECRET_KEY, SECURITY_PASSWORD_SALT или другие подобные можно еще более безопасно хранить в переменных окружения. Но это тема отдельной статьи и тут разбираться не будет.

Содержимое файла config-extended.py может быть таким:

##########
# Features
##########

SQLALCHEMY_TRACK_MODIFICATIONS = False


################
# Flask-Security
# https://pythonhosted.org/Flask-Security/configuration.html
################

# URLs
SECURITY_URL_PREFIX = "/admin"
SECURITY_LOGIN_URL = "/login/"
SECURITY_LOGOUT_URL = "/logout/"
SECURITY_POST_LOGIN_VIEW = "/admin/"
SECURITY_POST_LOGOUT_VIEW = "/admin/"
SECURITY_POST_REGISTER_VIEW = "/admin/"

# Включает регистрацию
SECURITY_REGISTERABLE = True
SECURITY_REGISTER_URL = "/register/"
SECURITY_SEND_REGISTER_EMAIL = False

# Включет сброс пароля
SECURITY_RECOVERABLE = True
SECURITY_RESET_URL = "/reset/"
SECURITY_SEND_PASSWORD_RESET_EMAIL = True

# Включает изменение пароля
SECURITY_CHANGEABLE = True
SECURITY_CHANGE_URL = "/change/"
SECURITY_SEND_PASSWORD_CHANGE_EMAIL  = False

# todo не работает отправка email
# AttributeError: 'NoneType' object has no attribute 'send'

Вариант 3: разделяем конфиги на много частей

С расширением проекта увеличивается кол-во конфигов. Для порядка выносим все конфиги в отдельную директорию configs. В поддиректории private храним конфиги в которых содержимое отличается от продакшена и локальной разработки. Эти конфиги добавляем в файл .gitignore и вручную создаем на сервере.

def create_app():
    app = Flask(__name__)
    app.config.from_pyfile('../configs/private/main.py')
    app.config.from_pyfile('../configs/private/celery.py')
    app.config.from_pyfile('../configs/sqlalchemy.py')
    app.config.from_pyfile('../configs/flask-security.py')
    app.config.from_pyfile('../configs/beatschedule.py')
    return app

У сайта нет цели самоокупаться, поэтому на сайте нет рекламы. Но если вам пригодилась информация, можете лайкнуть страницу, оставить комментарий или отправить мне подарок на чашечку кофе.

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи:
"Flask — конфигурационные файлы"