gpt4 book ai didi

python - Flask-restful 基本认证

转载 作者:行者123 更新时间:2023-11-28 21:38:52 25 4
gpt4 key购买 nike

我是 Flask 的新手,我的学业需要一些帮助。

我正在尝试使用 flask-restful 构建一个简单的 ToDo 列表系统。

我当前的代码如下所示:

class ToDoList(Resource):
'''TODO LIST'''
operation = ['delete']
decorators = [auth.login_required, advertise('operation')]
def post(self):
"""remove all item in the TODO list"""
operation = request.args.get('op')
if operation == 'delete':
collection2.delete_many({})
return {'Success': 'OK'}, 200
return {'Error':'Illegal Operation'}, 400
def get(self):
"""return a list of the TODO name"""
list_1 = collection2.find()
list_2 = []
for each in list_1:
list_2.append(JSONEncoder().encode(each))
return {'list':list_2}, 200

它有效,但我只希望 post 方法需要身份验证,而 get 方法不需要身份验证,这样任何人都可以在不登录的情况下获取列表。我正在使用 flask-restful 我不知道如何分别为每个函数提供装饰器。

最佳答案

我使用 flaskrestplus 进行基本身份验证。所有必需的授权都作为授权字典提供。然后将它们传递给 API。也可以使用

在方法级别应用授权
@api.doc(security='basicAuth')

验证逻辑(可以是 ldap 验证或 db 验证)可以写在一个名为 requires_Auth 的装饰器中。这个装饰器是使用

调用的
decorators = [requires_Auth]

完整代码

from flask import Flask, request
from flask_restplus import Api, Resource
from functools import wraps

def requires_Auth(f):
@wraps(f)
def decorator(*args, **kwargs):
auth = request.authorization
if auth:
print "inside decorator", auth.username,auth.password
return f(*args, **kwargs)
else:
return "Login required!!!!",401
return decorator


authorizations = {
'basicAuth': {
'type': 'basic',
'in': 'header',
'name': 'Authorization'
}
}
api = Api(app, version='1.0',
authorizations=authorizations
)

ns = api.namespace('/', description='Authentication API')

@ns.route('/withDecorator')
class HelloWorldWithDecorator(Resource):
decorators = [requires_Auth]
@api.doc(security='basicAuth')
def get(self):
return {'hello': 'world'}

api.add_namespace(ns)

if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5001)

关于python - Flask-restful 基本认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47590906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com