python - 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。
解决方案
您可以像这样构建您的项目
: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}
推荐阅读
- java - mysql-binlog-connector-java - 在二进制日志索引文件中找不到第一个日志文件名
- java - IBM AppScan 的验证要求问题
- openssl - 根 CA 证书和中间 CA 证书
- docker - 使用 docker 和 docker-compose 构建的工作流程是什么?
- javascript - 在 webpack + react 中使用 sass-loader 出现多个错误
- java - Reactor 调度程序实施注意事项
- javascript - 将 HTML 对象添加到事件 javascript/meteor
- c# - 找不到方法 Microsoft.Owin.Security.Notifications.MessageReceivedNotification
- c++ - C++调用另一个子类的公共方法
- python - TesseractError: (-1073741819, u'') 使用 pytesseract 时