Flaskでクエリ文字列を取得するにはどうすればよいですか?


409

クエリ文字列を取得する方法に関するフラスコのドキュメントからは明らかではありません。私は新しいです、ドキュメントを見て、見つかりませんでした!

そう

@app.route('/')
@app.route('/data')
def data():
    query_string=??????
    return render_template("data.html")

11
これは、クイックスタートの下の文書にあります:flask.pocoo.org/docs/quickstart/#the-request-object
Jarus

ただし、「クエリ文字列」という用語は使用しません。それは単にそれらをパラメーターと呼びます。> URL(?key = value)で送信されたパラメーターにアクセスするには、args属性を使用できます。>> searchword = request.args.get( 'key'、 '')
Ion Freeman

回答:


779
from flask import request

@app.route('/data')
def data():
    # here we want to get the value of user (i.e. ?user=some-value)
    user = request.args.get('user')

70
この例では、クエリ文字列自体ではなく、クエリ文字列で渡された「user」パラメータの値を返します。「クエリ文字列」とは、疑問符の後からポンド記号の前までのすべてを意味します(存在する場合)。
Lyndsy Simon 2012

45
それでも質問に関連していると考えて、有用な回答です。有効で+1
ネクロネット2013年

8
いいえ-dictや.getと同様に、Noneを取得します。
JPEG_

5
@LyndsySimon:よくわかりました。しかし、この回答は、Googleの検索用語が示唆する質問(「フラスコ取得要求パラメーター」)に正しく回答するため、とにかく賛成票を投じています。私もペダントですが、ウェブの神秘主義に合わせてこれをチョーキングしています。😉
マイケルScheper

5
私からの議論はありません!この質問に対する私のコメントは、SOポイントと全体的なカルマの継続的な情報源となっています。:)ハッキングハッピー!
Lyndsy Simon 2017

237

完全なURLはとして入手できrequest.url、クエリ文字列はとして入手できますrequest.query_string

次に例を示します。

from flask import request

@app.route('/adhoc_test/')
def adhoc_test():

    return request.query_string

クエリ文字列で渡された個々の既知のパラメータにアクセスするには、を使用できますrequest.args.get('param')。私の知る限り、これは「正しい」方法です。

ETA:先に進む前に、クエリ文字列が必要な理由を自問する必要があります。生の文字列を取得する必要はありませんでした。Flaskには抽象化された方法でアクセスするためのメカニズムがあります。やむを得ない理由がない限り、これらを使用する必要があります。


11
+1は実際の正解です。DropboxなどのOAuthフローは、トークンを渡すリダイレクトURLを定期的に要求します。自分でクエリ文字列を解析したいということは、完全に理にかなっています。
RichardLøvehjerte16年

不正解の場合は、仮想-1。文字通り正しいが、それはOPが探していたものを提供しない、それは受け入れられた答えはそうする。DWIM FTW。しかし、SOポイントマグネットとしてよく使われています。
デイブ

15

Werkzeug / Flaskはすでにすべてを解析しています。urlparseで同じ作業を再度行う必要はありません:

from flask import request

@app.route('/')
@app.route('/data')
def data():
    query_string = request.query_string  ## There is it
    return render_template("data.html")

リクエストオブジェクトとレスポンスオブジェクトの完全なドキュメントは、Werkzeugにあります。http://werkzeug.pocoo.org/docs/wrappers/


14

これを行うには、request.query_stringを使用します。

例:

view.pyを考えてみましょう

from my_script import get_url_params

@app.route('/web_url/', methods=('get', 'post'))
def get_url_params_index():
    return Response(get_url_params())

また、Flask Blueprintsを使用してモジュール化します-http: //flask.pocoo.org/docs/0.10/blueprints/

名がクエリ文字列/ web_url /?first_name = johnの一部として渡されているとしましょう

## here is my_script.py

## import required flask packages
from flask import request
def get_url_params():
    ## you might further need to format the URL params through escape.    
    firstName = request.args.get('first_name') 
    return firstName

ご覧のように、これはほんの小さな例です。複数の値をフェッチして、それらを形成し、使用するか、テンプレートファイルに渡すことができます。


11

クエリ文字列から値を取得する方法ではなく、クエリ文字列を探してここに来ました。

request.query_string URLパラメータを生のバイト文字列として返します(参照1)。

使用例request.query_string

from flask import Flask, request

app = Flask(__name__)

@app.route('/data', methods=['GET'])
def get_query_string():
    return request.query_string

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

出力:

Flaskルートのクエリパラメータ

参照:

  1. query_stringに関する公式のAPIドキュメント

1
これは、OPが求めていた正確なソリューションを提供するため、受け入れられる答えになるはずです。
constt

やや不正確な回答で+600と戦うことは困難です。
Marvin

4

クエリ文字列は次のようにしてください。

from flask import Flask, request

app = Flask(__name__)

@app.route('/parameters', methods=['GET'])
def query_strings():

    args1 = request.args['args1']
    args2 = request.args['args2']
    args3 = request.args['args3']

    return '''<h1>The Query String are...{}:{}:{}</h1>''' .format(args1,args2,args3)


if __name__ == '__main__':

    app.run(debug=True)

出力: ここに画像の説明を入力してください


request.args ['args1']は、request.args.get( 'args1')としてより適切に記述されます
imbatman

1

O'Reilly Flask Web Devleopmentで説明されているフラスコリクエストオブジェクトから取得可能なクエリ文字列のすべての形式:

オライリーフラスコウェブ開発、およびそれ以前のマナンGouhariで述べたように、最初にあなたはリクエストをインポートする必要があります。

from flask import request

request(あなたが推測した)という名前のコンテキスト変数としてFlaskによって公開されたオブジェクトですrequest。その名前が示すように、クライアントがHTTPリクエストに含めたすべての情報が含まれています。このオブジェクトには、それぞれ取得および呼び出し可能な多くの属性とメソッドがあります。

request選択するクエリ文字列を含む属性がかなりあります。ここでは、クエリ文字列を含むすべての属性と、その属性のO'Reillyブックの説明をリストします。

まずargs、「URLのクエリ文字列で渡されるすべての引数を持つディクショナリ」があります。したがって、クエリ文字列を辞書に解析したい場合は、次のようにします。

from flask import request

@app.route('/'):
    queryStringDict = request.args

(他の人が指摘したように.get('<arg_name>')、辞書から特定の値を取得するために使用することもできます)

すると、そこにあるformん属性、ないクエリ文字列が含まれているが、しかしこれは、別の属性の一部に含まれていない私が一瞬一覧表示されますクエリ文字列が含まれます。ただし、1つ目は、form「すべてのフォームフィールドがリクエストとともに送信された辞書」です。私はこれを言うために言います:と呼ばれるフラスコリクエストオブジェクトで利用可能な別の辞書属性がありますvaluesvaluesformとの値を組み合わせた辞書」argsです。これを取得すると、次のようになります。

from flask import request

@app.route('/'):
    formFieldsAndQueryStringDict = request.values

(繰り返し.get('<arg_name>')ますが、辞書から特定のアイテムを取得するために使用します)

別のオプションはquery_string、「生のバイナリ値としてのURLのクエリ文字列部分」です。その例:

from flask import request

@app.route('/'):
    queryStringRaw = request.query_string

次に追加ボーナスとして、full_path「URLのパスとクエリ文字列部分」があります。ejemploによる:

from flask import request

@app.route('/'):
    pathWithQueryString = request.full_path

そして最後にurl、「クライアントからリクエストされた完全なURL」(クエリ文字列を含む):

from flask import request

@app.route('/'):
    pathWithQueryString = request.url

幸せなハッキング:)


0

これは、を使用して行うことができますrequest.args.get()。たとえば、クエリ文字列にフィールドがある場合、次のdateようにしてアクセスできます

date = request.args.get('date')

requestフラスコからのインポートのリストに" " を追加することを忘れないでください。

from flask import request

あなたの答えは技術的に正しいですが、使用することを提案している他の答え(古くて完全なもの)はすでにありますrequest.args.get()。古い質問に対する新しい回答には、以前に言及されていないものを含める必要があります。
lfurini、

0

リクエストがGETで、いくつかのクエリパラメータを渡した場合、

fro`enter code here`m flask import request
@app.route('/')
@app.route('/data')
def data():
   if request.method == 'GET':
      # Get the parameters by key
      arg1 = request.args.get('arg1')
      arg2 = request.args.get('arg2')
      # Generate the query string
      query_string="?arg1={0}&arg2={1}".format(arg1, arg2)
      return render_template("data.html", query_string=query_string)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.