0

現在の request だけでなく、 RESTful API エンドポイントごとに関連リンクを生成しようとしています。受け入れられるもう 1 つの方法は、現在のブループリント (この場合は「blueprint_name」と呼ばれる) のすべてのエンドポイントを生成することです。これが私の現在のセットアップの要約です:

def function_that_generates_links():
   #what should I put here?

blueprint_name = Blueprint('blueprint_name', __name__, url_prefix='/blueprint_name')

@blueprint_name.route('/', methods=['GET'])
def endpoint_name():
   #regular_data_being_sent_out is defined somewhere here
   return jsonify(data=regular_data_being_sent_out,
                  links=function_that_generates_links())

@blueprint_name.route('/other_place', methods=['POST'])
def endpoint_name_other():
   #regular_data_being_sent_out is defined somewhere here
   return jsonify(data=regular_data_being_sent_out,
                  links=function_that_generates_links())
@blueprint_name.route('/another_place', methods=['DELETE'])
def endpoint_name_another_place():
   #regular_data_being_sent_out is defined somewhere here
   return jsonify(data=regular_data_being_sent_out,
                  links=function_that_generates_links())

@blueprint_name.route('/yet_another_place', methods=['PUT'])
def endpoint_name_yet_another_place():
   #regular_data_being_sent_out is defined somewhere here
   return jsonify(data=regular_data_being_sent_out,
                  links=function_that_generates_links())

各エンドポイントによって発行された各応答に、他のすべてのエンドポイントの適切な http '署名' を追加したいと考えています。上記のコード例では、「function_that_generates_links()」がこれを行う関数になります。url_encode() が使用できる必要なリンクを提供することは既にわかっていますが、適切な http 動詞(GET、POST、DELETE など) も必要です。私が立ち往生している対応するhttp-動詞/メソッドを見つけています。動詞がないとリンクが不完全/役に立たないため、動詞は重要です。

4

3 に答える 3

1

マーク、

request.method は、現在のルートを呼び出すために使用されたメソッドを返します。たとえば、次の場合:

@bluprint_name.route('/someresource', methods=["GET", "POST", "DELETE"]):
def return_a_resource():
    return request.method

これにより、クライアントが使用したメソッドが出力されます。

明確にするために、URL 自体でメソッドをエンコードすることはできません。クライアントは、別のフィールドからメソッドを読み取り、URL を適切に呼び出す必要があります。URL は単に場所と交通機関です。

于 2014-06-04T01:00:53.113 に答える
0

設計図のエンドポイントも見つけたかったのです。私はこのスニペットを思いつきました:

def rules_for_blueprint(bp):
if bp._got_registered_once:
    return [rule for rule in app.url_map.iter_rules() if rule.endpoint.split('.')[0]==bp.name]
else:
    raise Exception("Blueprint routes only exist after blueprint is registered")

設計図が登録されて初めて機能しますが、私のユースケースでは十分であり、他の人にも役立つと確信しています.

于 2015-08-02T15:01:10.303 に答える