私は Flask-RESTful を使用しており、ここに示す手法を使用して REST エンドポイントを取得しようとしています
メインコードは
def authenticate(func):
@wraps(func)
def wrapper(*args, **kwargs):
if not getattr(func, 'authenticated', True):
return func(*args, **kwargs)
acct = basic_authentication() # custom account lookup function
if acct:
return func(*args, **kwargs)
restful.abort(401)
return wrapper
class Resource(restful.Resource):
method_decorators = [authenticate] # applies to all inherited resources
私は同じ方法で動作しているように見えますが、どうなるかわかりません@wraps
?
現時点では魔法のように思えますが、次のことがわかりませんでした
a.) ラップされた関数が@wraps
ラッパーに渡されたようですが、ラッパーは何を返しますか?
考えられる答え: 最初に関数に渡されたものはすべて?
acct
はいの場合、関数がアカウント オブジェクトを受け取り、それに対してデータベース フェッチを行う必要がないように、オブジェクトなどの詳細情報をすべて渡すにはどうすればよいですか?
更新 例に基づいて、残りのエンドポイントは次のようになります
class UserResource(RestResource):
def get(self, uuid):
return {'method': 'get user -> ' + uuid}
そして、私はそれを次のように呼びます
curl -X GET http://127.0.0.1:5000/users/validUUID
すべてのリクエストが認証されると、有効なacct
オブジェクトが存在するかどうかを確認し、存在する場合は、コントロールをエンドポイントに委任します
質問:オブジェクト
を見つけるために実際に 1 つのデータベース呼び出しを行っているのでacct
、有効なオブジェクトが見つかったときにそれをエンドポイントに渡すことは可能acct
ですか?
このようにして、2 つのことが起こります。a.)
呼び出しが認証されていることを知っています
。b.) DB 呼び出しを再度行い、validUUID からオブジェクトを acct
再度取得するのではなく、今後の作業に使用できるオブジェクトを再利用します。acct
どうすればこれを達成できますか?