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

На сайте отсутствует реклама! Значете почему?

Помогать людям - моё хобби. А навыки разработчика позволяют не парится нулевой монетизизацией этого сайта. Хотя...

Если вам помогла информация, то даже от доната в 40 рублей мне будет приятно. Докину немного, куплю латте в макдаке, вспомню за чей счет банкет и карма вам зачтется!

Но и просто оставленный комментарий благодарности ниже принесет мне улыбку радости :)

А если захочется написать всякие гадости с переходом на личности, да тоже не стесняйтесь, но обычно я отправляю такое в спам. Люблю, когда дома чисто.

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

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