web-dev-qa-db-ja.com

Flaskでは、request.argsとは何ですか?どのように使用されますか?

私はFlaskが初めてです。 request.argsの使用方法がわかりません。クエリ文字列の値を返すために使用されることをどこかで読みました[間違っている場合は修正してください]。そして、request.args.get()が取るパラメーターの数。送信したフォームデータを保存する必要がある場合は、

fname = request.form.get("firstname")

ここでは、1つのパラメーターのみが渡されます。

このコードを検討してください。このコードではページネーションも行われています。

@app.route("/")
def home():
    cnx = db_connect()
    cur = cnx.cursor()
    output = []

    page = request.args.get('page', 1)

    try:
        page = int(page)
        skip = (page-1)*4
    except:
        abort(404)

    stmt_select = "select * from posts limit %s, 4;"
    values=[skip]

    cur.execute(stmt_select,values)
    x=cur.fetchall()

    for row in reversed(x):
        data = {
           "uid":row[0],
           "pid":row[1],
           "subject":row[2],
           "post_content":row[3],
           "date":datetime.fromtimestamp(row[4]),
        }
        output.append(data)

    next = page + 1
    previous = page-1
    if previous<1:
    previous=1
    return render_template("home.html", persons=output, next=next, previous=previous)

ここで、request.args.get()は2つのパラメーターを取ります。なぜ2つのパラメーターを必要とするのか、それをどのように使用するのかを説明してください。

50
martinho

flask.Request.args ドキュメントによると。

flask.Request.args
AMultiDictクエリ文字列の解析されたコンテンツ。 (URLの疑問符の後の部分)。

したがって、args.get()は、メソッドがget()で、 MultiDict の場合、プロトタイプは次のとおりです。

get(key, default=None, type=None)
89
luoluo

FlaskとPythonを使用する初心者としての@martinho自身、ここでの以前の答えは、ファンダメンタルズをよく理解していることは当然のことだと思います。あなたや他の視聴者が基本を知らない場合は、答えを理解するためのより多くのコンテキストを与えます...

... request.argsは「辞書」オブジェクトを提供します。 「辞書」オブジェクトは、1つのオブジェクトに多くの要素を格納できるという点で、Pythonの他のコレクションタイプのオブジェクトに似ています。したがって、あなたの質問への答え

そして、request.args.get()が取るパラメーターの数。

(前の回答で述べたように)「辞書」タイプのオブジェクトの1つのオブジェクトのみを取ります。ただし、この「辞書」オブジェクトには、必要な数の要素を含めることができます...(辞書には、Key、Valueというペア要素があります)。

「辞書」以外のオブジェクトのその他のコレクションタイプは、「タプル」および「リスト」です。他のPythonの基礎を学ぶために、それらと「データ構造」でGoogle検索を実行できます。 。この答えはPythonに基づいています。同じことが他のプログラミング言語にも当てはまるかどうかはわかりません。

10
alejandro gg

request.argsは、クエリ文字列の解析されたコンテンツを含む MultiDict です。 ドキュメント of getメソッドから:

getkey、default = None、type = None

要求されたデータが存在しない場合、デフォルト値を返します。 typeが提供され、呼び出し可能な場合、値を変換するか、それを返すか、不可能な場合はValueErrorを送出する必要があります。

2
r-m-n

いくつかの場合に注意すべき興味深い動作があります。

from werkzeug.datastructures import MultiDict

d = MultiDict([("ex1", ""), ("ex2", None)])

d.get("ex1", "alternive")
# returns: ''

d.get("ex2", "alternative")
# returns no visible output of any kind
# It is returning literally None, so if you do:
d.get("ex2", "alternative") is None
# it returns: True

d.get("ex3", "alternative")
# returns: 'alternative'
0
Juha Untinen