Chr*_*est 3 flask python-3.x flask-jwt
我正在Flask使用Blueprints 开发一个0.12应用程序,并且尝试使用Flask-JWT(0.3.2)进行身份验证。
我看不到的Flask-JWT教程都使用蓝图。
每个示例中通常都有一段代码,其功能如下:
app = Flask(__name__)
jwt = JWT(app, authenticate, identity)
Run Code Online (Sandbox Code Playgroud)
在蓝图烧瓶应用程序中,结构趋于更像这样:
__init__.py:
from swarm.controllers.main import main
from swarm.controllers.grid import grid
from swarm.controllers.address import address
def create_app(object_name):
app = Flask(__name__)
...
app.register_blueprint(main)
app.register_blueprint(grid)
app.register_blueprint(address)
Run Code Online (Sandbox Code Playgroud)
控制器/ main.py:
main = Blueprint('main', __name__)
Run Code Online (Sandbox Code Playgroud)
控制器/grid.py:
grid = Blueprint('grid', __name__)
Run Code Online (Sandbox Code Playgroud)
控制器/address.py:
address = Blueprint('address', __name__)
Run Code Online (Sandbox Code Playgroud)
如何Flask-JWT在控制器中引用和使用其装饰器?
通过在烧瓶源代码或Micha中显示如何向标准示例(例如blueprintexample)添加JWT装饰器,可能会更容易回答这个问题。Karzy?ski的REST API演示。
我建立了一个简单的示例,可以使用Flask-JWT装饰器。
文件结构:
server
??? app
| ??? admin # blueprint
| | ??? __init__.py
| | ??? views.py
| ??? __init__.py
??? config.py
??? run.py
Run Code Online (Sandbox Code Playgroud)
首先,创建一个名为的蓝图admin并导入其视图
# file: server/app/admin/init.py
from flask import Blueprint
admin = Blueprint('admin', __name__)
from . import views
Run Code Online (Sandbox Code Playgroud)
该admin蓝图有一个视图。在这里,我们导入了admin蓝图和一些flask_jwt东西,因此我们可以正确地访问它们的装饰器:
from flask_jwt import jwt_required, current_identity
from . import admin
# file: server/app/admin/views.py
@admin.route('/protected')
@jwt_required()
def protected():
return '%s' % current_identity
Run Code Online (Sandbox Code Playgroud)
现在创建flask应用程序,创建JWT实例,然后将admin蓝图注册到flask应用程序:
# file: server/app/__init__.py
from flask import Flask
from flask_jwt import JWT
from werkzeug.security import safe_str_cmp
from .admin import admin
# skipping over jwt authenticate() and identity() creation
# https://pythonhosted.org/Flask-JWT/
# ...
app = Flask(__name__)
app.config.from_object('config')
jwt = JWT(app, authenticate, identity)
app.register_blueprint(admin, url_prefix='/admin')
Run Code Online (Sandbox Code Playgroud)
最后,设置脚本管理器:
from flask_script import Manager, Server
from server.app import app
manager = Manager(app)
# Turn on debugger by default and reloader
manager.add_command("runserver", Server(
use_debugger = True,
use_reloader = True,
host = '0.0.0.0',
port = 5000)
)
if __name__ == "__main__":
manager.run()
Run Code Online (Sandbox Code Playgroud)
现在,如果我们转到/ admin / protected网址,我们将看到JWT已启动并正在运行:
{
"description": "Request does not contain an access token",
"error": "Authorization Required",
"status_code": 401
}
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助!
| 归档时间: |
|
| 查看次数: |
1906 次 |
| 最近记录: |