我正在尝试使用python3和flask和flask_jwt_extended构建一个博客作为投资组合示例。
我可以创建一个这样的文件,它会运行:
from flask_jwt_extended import (create_access_token, get_jwt_identity, JWTManager, jwt_required, get_raw_jwt)
from flask import Flask, request, Blueprint
app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'this-is-super-secret'
app.config['JWT_BLACKLIST_ENABLED'] = True
app.config['JWT_BLACKLIST_TOKEN_CHECKS'] = ['access']
jwt = JWTManager(app)
@app.route(....)
@jwt required
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用 Blueprint 时,它不会注册 JWTManager
这是我的 user.py 文件:
from flask_jwt_extended import (create_access_token, get_jwt_identity, JWTManager, jwt_required, get_raw_jwt)
from flask import Flask, request, Blueprint
app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'this-is-super-secret'
app.config['JWT_BLACKLIST_ENABLED'] = True
app.config['JWT_BLACKLIST_TOKEN_CHECKS'] = ['access']
jwt = JWTManager(app)
user_blueprint = Blueprint('user_blueprint', __name__)
@user_blueprint.route(....)
@jwt required
Run Code Online (Sandbox Code Playgroud)
这是我的 app.py:
from user import *
app = Flask(__name__)
app.register_blueprint(user_blueprint)
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试运行 app.py 时,它会返回 500(内部错误)并将其记录到日志文件中:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/flask_jwt_extended/utils.py", line 127, in _get_jwt_manager
return current_app.extensions['flask-jwt-extended']
KeyError: 'flask-jwt-extended'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python3.6/dist-packages/flask/_compat.py", line 35, in reraise
raise value
File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/ali/Desktop/cetia_api/user.py", line 63, in login
return create_token(user_inputs)
File "/home/ali/Desktop/cetia_api/user_functions.py", line 103, in create_token
access_token = create_access_token(identity=data, expires_delta=expires)
File "/usr/local/lib/python3.6/dist-packages/flask_jwt_extended/utils.py", line 156, in create_access_token
jwt_manager = _get_jwt_manager()
File "/usr/local/lib/python3.6/dist-packages/flask_jwt_extended/utils.py", line 129, in _get_jwt_manager
raise RuntimeError("You must initialize a JWTManager with this flask "
RuntimeError: You must initialize a JWTManager with this flask application before using this method
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我该怎么做吗?在过去的 3 天里,我尝试了一切。它已经调试了 20 个小时,但仍未修复
您需要app在每个位置使用相同的内容。目前您正在app您的 users.py 文件中创建一个,并在您的 app.py 文件中创建一个不同的app。
通常,您会希望使用 Flask 应用程序工厂模式来执行此操作(https://flask.palletsprojects.com/en/1.1.x/patterns/appfactories/)。一个示例可能如下所示:
from flask_jwt_extended import JWTManager
jwt = JWTManager()
Run Code Online (Sandbox Code Playgroud)
from flask_jwt_extended import (create_access_token, get_jwt_identity, jwt_required, get_raw_jwt)
from flask import Flask, request, Blueprint
user_blueprint = Blueprint('user_blueprint', __name__)
@user_blueprint.route(....)
@jwt_required
Run Code Online (Sandbox Code Playgroud)
from extensions import jwt
from users import users_blueprint
def create_app():
app = Flask(__name__)
app.secret_key = 'ChangeMe!'
app.config['JWT_BLACKLIST_ENABLED'] = True
app.config['JWT_BLACKLIST_TOKEN_CHECKS'] = ['access']
jwt.init_app(app)
app.register_blueprint(user_blueprint)
return app
Run Code Online (Sandbox Code Playgroud)
from app import create_app
app = create_app()
if __name__ == '__main__':
app.run()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1723 次 |
| 最近记录: |