Python 2.7 flask restful with flask auth:具有不同身份验证的多个HTTP方法
我正在尝试使用具有多个HTTP(GET、POST、PUT、DELETE)方法的相同url,并且对于每个方法,它使用flask auth进行不同的身份验证 我试着创造出比课堂更多的东西Python 2.7 flask restful with flask auth:具有不同身份验证的多个HTTP方法,python-2.7,authentication,flask,flask-restful,flask-httpauth,Python 2.7,Authentication,Flask,Flask Restful,Flask Httpauth,我正在尝试使用具有多个HTTP(GET、POST、PUT、DELETE)方法的相同url,并且对于每个方法,它使用flask auth进行不同的身份验证 我试着创造出比课堂更多的东西 class GetUser(Resource): decorators = [Users.auth.login_required] def get(self): '''..etc''' class PostUser(Resource): decorators = [
class GetUser(Resource):
decorators = [Users.auth.login_required]
def get(self):
'''..etc'''
class PostUser(Resource):
decorators = [Admin.auth.login_required]
def post(self):
'''..etc'''
restful_api.add_resource(GetUser,'/User')
restful_api.add_resource(PostUser,'/User')
但是发生的事情是,
restful\u api.add\u resource(postaser,/User')
将覆盖restful\u api.add\u resource(GetUser,/User')
我能看到的唯一合理的选择是创建一个Flask restful的resource
类的子类,并自己实现每个方法修饰符。然后,您的资源可以从类继承以具有此功能
在资源
子类中,需要提供调度请求
方法的替代实现:
处理装饰器的代码如下:
for decorator in self.method_decorators:
meth = decorator(meth)
我想您可以将方法\u decorators
更改为字典,然后按如下方式应用decorator:
for decorator in self.method_decorators[request.method.lower()]:
meth = decorator(meth)
然后,您上面的示例变成:
class User(MyResource):
method_decorators = {
'get': [Users.auth.login_required],
'post': [Admin.auth.login_required]
}
def get(self):
'''..etc'''
def post(self):
'''..etc'''
restful_api.add_resource(User,'/User')
我发现我也能做到
class User(Resource):
@Admin.auth.login_required
def post(self):
'''..etc'''
@Users.auth.login_required
def get(self):
'''..etc'''
@Admin.auth.login\u required def post(…)
@svrist有什么问题?@svrist:这不适用于基于类的视图,如Flask-RESTful使用的视图。这种方法的问题是,装饰程序会收到额外的self
参数,因为您是在装饰方法而不是函数。对于一些装饰者来说,这可能不是一个问题,但有些人可能不希望有额外的参数。