本质上,我有一个这样的目录:
/app
runserver.py
/myapp
__init__.py
api.py
auth.py
/resources
__init.py
users.py
login.py
/models
__init.py
models.py
/common
/assets
在我的 auth.py 中,我有一个标准的基于 HTTP 的用户名/密码身份验证。我将这些用于必须登录的区域,并且我想验证每个用户。Login.py 是我需要添加装饰器的地方,但由于此错误,整个应用程序无法运行: AttributeError: 'module' object has no attribute 'login_required'
from flask.ext.httpauth import HTTPBasicAuth
auth = HTTPBasicAuth()
@auth.verify_password
def verify_password(username, password):
user = User.query.filter_by(username = username).first()
if not user or not user.verify_password(password):
return False
g.user = user
return True
@auth.error_handler
def unauthorized():
return make_response(jsonify({'message': 'Unauthorized'}), 403)
我的 login.py 代码,它调用装饰器,然后请求身份验证。
from flask_restful import Resource, reqparse
from myapp.models.users import User
from myapp import auth
class login(Resource):
decorators = [auth.login_required]
def __init__(self):
self.reqparse = reqparse.RequestParser()
self.reqparse.add_argument('userid', type = str , default="")
self.reqparse.add_argument('username', type = str, default="")
self.reqparse.add_argument('password', type = str, default="")
super(login, self).__init__()
def post(self):
args = self.reqparse.parse_args()
username = args['username']
password = args['password']
message = {'status': 'Authorized'}
return message
所以总结一下,我的问题是:如何以及在哪里添加flask-httpauth 类,以便我可以使用装饰器。我现在的选择可能是将验证代码粘贴到需要它的每个资源类中,但似乎必须有更好的方法来组织它。帮助?