首页 > 解决方案 > Flask Restul 基本身份验证

问题描述

我有以下用于烧瓶 restful 基本身份验证的代码

from flask import Flask
from flask_restful import Resource, Api
from flask_httpauth import HTTPBasicAuth

app = Flask(__name__)
api = Api(app, prefix="/api/v1")
auth = HTTPBasicAuth()

USER_DATA = {
    "admin": "SuperSecretPwd"
}


@auth.verify_password
def verify(username, password):
    if not (username and password):
        return False
    return USER_DATA.get(username) == password


class PrivateResource(Resource):
    @auth.login_required
    def get(self):
        return {"meaning_of_life": 42}


api.add_resource(PrivateResource, '/private')

if __name__ == '__main__':
    app.run(debug=True)

但是如果我的资源类PrivateResource在单独的文件中,我该如何使用@auth.login_required。我不想在每个资源文件中都导入 app.py。

标签: pythonflaskflask-restful

解决方案


您可以像这样构建您的项目
app.py

from flask import Flask
from flask_restful import Api
from my_resource import PrivateResource

app = Flask(__name__)
api = Api(app, prefix="/api/v1")

# add all resources here
api.add_resource(PrivateResource, '/private')

if __name__ == '__main__':
    app.run(debug=True)

处理身份验证authentication.py

from flask_httpauth import HTTPBasicAuth

auth = HTTPBasicAuth()

USER_DATA = {
    "admin": "SuperSecretPwd"
}

@auth.verify_password
def verify(username, password):
    if not (username and password):
        return False
    return USER_DATA.get(username) == password

以及您在单独文件中的资源,例如my_resource.py

from flask_restful import Resource
from authentication import auth

class PrivateResource(Resource):
    @auth.login_required
    def get(self):
        return {"meaning_of_life": 42}

推荐阅读