基本的に、次のようなディレクトリがあります。
/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 クラスを追加する方法と場所を教えてください。今の私の選択肢は、その認証コードを必要とするすべてのリソース クラスに貼り付けることかもしれませんが、それを整理するためのより良い方法があるはずです。ヘルプ?