0

私は 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

どうすればこれを達成できますか?

4

1 に答える 1