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に言及する方法はありますか?
クエリパラメータを実際に使用する場合、他の回答には正しい解決策があります。何かのようなもの:
@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を変数として関数に渡します。
お役に立てば幸いです。
ルートはクエリ文字列と一致しません。クエリ文字列はメソッドに直接渡されます。
from flask import request
@app.route('/createcm', methods=['GET'])
def foo():
print request.args.get('summary')
print request.args.get('change')
これを試すことができます:
---カールリクエスト---
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 "&"で機能しません。
@app.route('/createcm', methods=['GET'])
def foo():
print request.args.get('summary')
print request.args.get('change')
URLパラメーターとURL自体を混同しています。
request.args.get("summary")
およびrequest.args.get("change")
を使用して、URLパラメーターにアクセスできます。
リクエストURL:http://0.0.0.0:8888/createcm?summary=VVV&change=Feauure
、エンドポイントは/createcm
および?summary=VVV&change=Feauure
はargs
リクエストの一部です。あなたはこれを試すことができます:
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"
}
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