首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将烧瓶蓝图与烧瓶-JWT结合起来

将烧瓶蓝图与烧瓶-JWT结合起来
EN

Stack Overflow用户
提问于 2017-02-24 04:09:28
回答 1查看 4.6K关注 0票数 3

我正在开发一个带有蓝图的Flask 0.12应用程序,并试图使用Flask-JWT (0.3.2)进行身份验证。

我所看到的关于水瓶-JWT的教程中没有一个使用蓝图。

每个示例中通常都有一个代码块,执行如下操作:

代码语言:javascript
复制
app = Flask(__name__)
jwt = JWT(app, authenticate, identity)

在一个蓝印的烧瓶应用程序中,其结构更像是这样:

__init__.py

代码语言:javascript
复制
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)

controllers/main.py:

代码语言:javascript
复制
main = Blueprint('main', __name__)

controllers/grid.py:

代码语言:javascript
复制
grid = Blueprint('grid', __name__)

controllers/address.py:

代码语言:javascript
复制
address = Blueprint('address', __name__)

我将如何引用Flask-JWT并在控制器中使用它的装饰器?

通过演示如何在蓝图示例源代码o MichałKarzyński的REST演示中添加JWT装饰器,可能会更容易回答这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-28 09:25:26

我已经构建了一个简单的示例,可以使用Flask-JWT装饰器。

文件结构:

代码语言:javascript
复制
server
├── app
|   ├── admin # blueprint
|   |   ├── __init__.py
|   |   ├── views.py
|   ├── __init__.py
├── config.py
└── run.py

首先,创建一个名为admin的蓝图并导入其视图

代码语言:javascript
复制
# file: server/app/admin/init.py
from flask import Blueprint

admin = Blueprint('admin', __name__)

from . import views

admin蓝图只有一个视图。在这里,我们导入admin蓝图和一些flask_jwt内容,以便正确地访问它们的装饰器:

代码语言:javascript
复制
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

现在创建烧瓶应用程序,创建JWT实例,并将admin蓝图注册到烧瓶应用程序:

代码语言:javascript
复制
# 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')

最后,设置脚本管理器:

代码语言:javascript
复制
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()

现在,如果我们转到我们的/admin/受保护的url,我们将看到JWT已经启动并运行:

代码语言:javascript
复制
{
  "description": "Request does not contain an access token",
  "error": "Authorization Required",
  "status_code": 401
}

我希望这能帮到你!

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42430614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档