У меня есть приложение, которое работало нормально, затем я добавил несколько строк кода, которые логически идентичны некоторому коду, который уже был там, и внезапно я выхожу из ошибок контекста приложения.
Код пытается получить новую переменную конфигурации из current_app.config. Когда он работал, он уже получал такие переменные.
Это работает, обратите внимание, что, следовательно, current_app.config['SECRET_KEY']
работает.
**config.py**
...
class Config(object):
...
SECRET_KEY = os.getenv('SECRET_KEY') or \
'yaP5vdVON2IlssoL3OZEo41P2MXJo6hx'
...
**models.py**
...
from flask import current_app
...
class User(UserMixin, db.Model):
__bind_key__ = 'app'
__tablename__ = 'user'
)
tennant_id = db.Column(db.ForeignKey('_constants.tennant_id'), nullable=False, index=True)
user_id = db.Column(db.Integer, primary_key=True)
identity_id = db.Column(db.Integer, index=True)
...
def get_reset_password_token(self, expires_in=600):
return jwt.encode(
{'reset_password': self.user_id, 'exp': time() + expires_in},
current_app.config['SECRET_KEY'],
algorithm='HS256').decode('utf-8')
Следующее не работает , обратите внимание, что нет очевидных различий в способах обработки переменных конфигурации RELATIONSHIP_FOLLOW_TYPE
и MESSAGE_POST_TYPE
.
Кроме того, я использовал явно объявленные версии этих переменных в коде, поэтому код работал!
**config.py**
...
class Config(object):
...
SECRET_KEY = os.getenv('SECRET_KEY') or \
'yaP5vdVON2IlssoL3OZEo41P2MXJo6hx'
...
MESSAGE_POST_TYPE = 2
RELATIONSHIP_FOLLOW_TYPE = 1
...
**models.py**
...
from flask import current_app
...
class User(UserMixin, db.Model):
__bind_key__ = 'app'
__tablename__ = 'user'
)
tennant_id = db.Column(db.ForeignKey('_constants.tennant_id'), nullable=False, index=True)
user_id = db.Column(db.Integer, primary_key=True)
identity_id = db.Column(db.Integer, index=True)
...
def get_reset_password_token(self, expires_in=600):
return jwt.encode(
{'reset_password': self.user_id, 'exp': time() + expires_in},
current_app.config['SECRET_KEY'],
algorithm='HS256').decode('utf-8')
...
def followed_posts(self):
followed = Message.query.join(
Relationship,
(Relationship.related_user_id == Message.sender_id)). \
filter(Relationship.user_id == self.user_id). \
filter(Relationship.relationship_type_id == current_app.config['RELATIONSHIP_FOLLOW_TYPE']). \
filter(Message.message_type_id == current_app.config['MESSAGE_POST_TYPE'])
own = Message.query.filter_by(
sender_id = self.user_id,
message_type_id = current_app.config['MESSAGE_POST_TYPE'])
return followed.union(own).order_by(Message.timestamp.desc())
Я перепробовал все! В частности: -
- Я вернулся к более старой рабочей версии кода, вручную добавил переменную конфигурации в Config, вручную добавил использование этой переменной для чтения из конфигурации в models.py, и это сработало! Я не вижу различий между кодом!
- В моем новом нерабочем коде я вернул две новые переменные конфигурации обратно к явному объявлению, код работал до тех пор, пока не достигла следующей
current_app.config
переменной после SECRET_KEY
, другими словами current_app.config
работает для SECRET_KEY
, но не для RELATIONSHIP_FOLLOW_TYPE
и MESSAGE_POST_TYPE
.
Очевидно, я должен делать что-то довольно глупое. Может кто-то просто указать мне куда-либо или по любой причине, почему это может произойти. Любые предложения приветствуются.