web-dev-qa-db-ja.com

in Flask app routeの複数のパラメーター

URL呼び出しに複数のパラメーターがある場合、flask approuteを書く方法は?

AJaxから呼び出しているURLは次のとおりです。

http://0.0.0.0:8888/createcm?summary=VVV&change=Feauure

私はflaskこのようなapprouteを書こうとしていました。

@app.route('/test/<summary,change> ,methods=['GET']

しかし、これは機能していません。 approuteに言及する方法はありますか?

35
user2058205

クエリパラメータを実際に使用する場合、他の回答には正しい解決策があります。何かのようなもの:

@app.route('/createcm')
def createcm():
   summary  = request.args.get('summary', None)
   change  = request.args.get('change', None)

いくつかのメモ。 GETリクエストのみをサポートする必要がある場合、ルートデコレータにメソッドを含める必要はありません。

クエリパラメータを説明します。 「?」以外のすべてこの例では、クエリパラメータと呼ばれます。 FlaskはこれらのクエリパラメータをURLから取り出し、ImmutableDictに配置します。request.argsでアクセスできます。キー、つまりrequest.args['summary']またはgetメソッドIと他のいくつかのコメンターが言及しました。これにより、存在しない場合にデフォルト値(Noneなど)を提供する機能が追加されます。これは、クエリパラメーターでよく使用されるオプションです。

今、あなたの例であなたがしようとしている別のオプションがあり、それはパスパラメータを使用することです。これは次のようになります。

@app.route('/createcm/<summary>/<change>')
def createcm(summary=None, change=None):
    ...

ここのURLは次のようになります。 http://0.0.0.0:8888/createcm/VVV/Feauure

VVVとFeauureを変数として関数に渡します。

お役に立てば幸いです。

38
GMarsh

ルートはクエリ文字列と一致しません。クエリ文字列はメソッドに直接渡されます。

from flask import request

@app.route('/createcm', methods=['GET'])
def foo():
   print request.args.get('summary')
   print request.args.get('change')
17
Burhan Khalid

これを試すことができます:

---カールリクエスト---

curl -i "localhost:5000/api/foo?a=hello&b=world"  

--- flask server ---

from flask import Flask, request

app = Flask(__name__)


@app.route('/api/foo/', methods=['GET'])
def foo():
    bar = request.args.to_dict()
    print bar
    return 'success', 200

if __== '__main__':   
    app.run(debug=True)

---コンソール出力---

{'a': u'hello', 'b': u'world'}

追伸curlオプションで二重引用符( "")を省略しないでください。省略しないと、Linux cuz "&"で機能しません。

13
Little Roys
@app.route('/createcm', methods=['GET'])
def foo():
    print request.args.get('summary')
    print request.args.get('change')
6
Peng Xiao

URLパラメーターとURL自体を混同しています。

request.args.get("summary")およびrequest.args.get("change")を使用して、URLパラメーターにアクセスできます。

4
Anorov

リクエストURL:http://0.0.0.0:8888/createcm?summary=VVV&change=Feauure、エンドポイントは/createcmおよび?summary=VVV&change=Feauureargsリクエストの一部です。あなたはこれを試すことができます:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/createcm', methods=['get'])
def create_cm():
    summary = request.args.get('summary', None) # use default value repalce 'None'
    change = request.args.get('change', None)
    # do something, eg. return json response
    return jsonify({'summary': summary, 'change': change})


if __== '__main__':
    app.run(debug=True)

httpie 例:

http get :5000/createcm summary==vvv change==bbb -v
GET /createcm?summary=vvv&change=bbb HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: localhost:5000
User-Agent: HTTPie/0.9.8



HTTP/1.0 200 OK
Content-Length: 43
Content-Type: application/json
Date: Wed, 28 Dec 2016 01:11:23 GMT
Server: Werkzeug/0.11.13 Python/3.6.0

{
    "change": "bbb",
    "summary": "vvv"
}
1
Wei Huang

2つのステップでこれを行うことができます。1] flask [app.py]のコード

from flask import Flask,request

app = Flask(__name__)

@app.route('/')
def index():
    return "hello"

@app.route('/admin',methods=['POST','GET'])
def checkDate():
    return 'From Date is'+request.args.get('from_date')+ ' To Date is '+ request.args.get('to_date')


if __name__=="__main__":
    app.run(port=5000,debug=True)

2]ブラウザでURLをヒットします。

http://127.0.0.1:5000/admin?from_date=%222018-01-01%22&to_date=%222018-12-01%22
0
Viraj.Hadoop