クエリストリングでページからパラメータを取得する

投稿者: | 9月 5, 2022

ファイル構成

ファイル名内容
app.pyデコレータを設定
GETリクエストのパラメータを取得する
request.args.key(‘value’) or (‘value’, ‘default vlaue’)
index.htmlクエストリンクのリンクを設定する
?present_no=1
result.html選択した結果を表示する

GETリクエスト パラメータパラメータが不適切パラメータが無い説明
request.args[‘value’]KeyErrorBadRequestErrorGETパラメータ(Keyがなければエラーになる)
request.args.get(‘value’)KeyErrorKeyError
none
GETパラメータ(KeyがなければNoneを返す)
request.args.give(‘value’, ‘default_value’)KeyErrordefault valueGETパラメータがない場合のデフォルト値を指定する

app.py

Without error check

@app.route('/result')
def result():
    presents = { '1' : 'Stratcaster', '2' : 'Telecaster', '3' : 'Les Paul', '4' : 'ES-335'}

    #present_no = request.args['present_no']
    #present_no = request.args.get('present_no')
    present_no = request.args.get('present_no', '')

    return render_template('result.html', present=presents[present_no])
  • 上記以外の数字が選択された場合 keyError になる。
  • request.args.get(‘value’, ‘default value’) > valueが適切でない場合default valueを返す

With error check

@app.route('/result')
def result():
    presents = { '1' : 'Stratcaster', '2' : 'Telecaster', '3' : 'Les Paul', '4' : 'ES-335'}

    #present_no = request.args['present_no']
    present_no = request.args.get('present_no')
    #present_no = request.args.get('present_no', '')

    if present_no not in ('1', '2', '3', '4'):
        return render_template('result_err.html', error_no=present_no)
    else:
        return render_template('result.html', present=presents[present_no])
  • 上記以外の数字が選択された場合 result_err.html を引数error_noと一緒に返す
  • request.args.get(‘value’) > valueが適切でない場合noneを返す
  • if文によるクエストリングの値チェック

index.html

    <body>
    <h1>{{ title }}</h1>
    <p> Select a number to get a present! </p>
    <ul>
        <li><a href="/result?present_no=1">No.1</a></li>
        <li><a href="/result?present_no=2">No.2</a></li>
        <li><a href="/result?present_no=3">No.3</a></li>
        <li><a href="/result?present_no=4">No.4</a></li>
    </ul>
    </body>

result.html

<body>
    <h1>Result</h1>
    <p>Congrats! , you got a <strong> {{ present }} </strong>.</p>
    <p><a href="/">Back</a></p>
</body>

result_err.html

<body>
    <h1>Error Result</h1>
    <p>
        Your input is <strong> {{ error_no }} </strong>.<br>
        Wrong number was input.
    </p>
    <p><a href="/">Back</a></p>
</body>