7

私はフラスコレストフルRequestParserを使用していますが、整数のみのリストを検証する を構築するのに問題があります。次の形式の予期される JSON リソース形式を想定します。

{
    'integer_list': [1,3,12,5,22,11, ...] # with a dynamic length
}

...そして、次のようなフォームを使用して RequestParser を作成します。

from flask.ext.restful import reqparse
parser = reqparse.RequestParser()
parser.add_argument('integer_list', type=list, location='json')

...しかし、どうすれば整数リストであることを検証できますか?

4

5 に答える 5

39

action='append'を使用できます。例えば:

parser.add_argument('integer_list', type=int, action='append')

複数の整数パラメーターを渡します。

curl http://api.example.com -d "integer_list=1" -d "integer_list=2" -d "integer_list=3"

そして、整数のリストを取得します:

args = parser.parse_args()
args['integer_list'] # [1, 2, 3]

無効なリクエストは、自動的に 400 Bad Request レスポンスを受け取ります。

于 2015-05-12T10:57:03.190 に答える
-1

同じ問題が発生しました。ソースコードを調べたところ、Argument.type主にシチュエーションで使われていることがわかりましたself.type(value)。だからあなたは私のようにこれをハックすることができます:

parser.add_argument('integer_list', type=json.loads, location='json')

それは本来あるべきことではありませんが、機能します。

于 2015-12-02T10:33:42.780 に答える
-1

タイプは isinstance で確認できます。ここでは、タイプを int (整数) に設定します。

これは次のように機能します。

a=1    
isinstance(a,int)

TRUE と評価されます

これをリスト全体で確認するには、all() を使用します。forループでリストをループして、リストのすべての要素がチェックされるようにします。

if all(isinstance(x,int) for x in integer_list):
    parser.add_argument('integer_list', type=list, location='json')

あなたの場合、すべての要素が整数であり、 for ループでコードを実行する場合、これは TRUE と評価されるはずです

于 2015-01-03T19:12:18.260 に答える