Boy*_* Li 3 python flask flask-restful
我是 Flask 的新手,我的学业需要一些帮助。
我正在尝试使用flask-restful构建一个简单的待办事项列表系统。
我当前的代码如下所示:
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
Run Code Online (Sandbox Code Playgroud)
它有效,但我只post想要需要身份验证的方法和不需要身份验证的get方法,这样任何人都可以在不登录的情况下获取列表。我正在使用flask-restful 我不知道如何分别为每个函数提供装饰器。
小智 5
我使用flaskrestplus 进行基本身份验证。所有必需的授权都作为授权字典提供。然后将它们传递给 API。还可以使用在方法级别应用授权
@api.doc(security='basicAuth')
Run Code Online (Sandbox Code Playgroud)
验证逻辑(可以是 ldap 验证或 db 验证)可以写在一个叫做 requires_Auth 的装饰器中。这个装饰器是使用调用的
decorators = [requires_Auth]
Run Code Online (Sandbox Code Playgroud)
完整代码
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)
Run Code Online (Sandbox Code Playgroud)