【Flask】request.args実行時のエラー違いを確認する

## request.argsのエラーの違いをクエストリングを使って確認してみた


| GETリクエスト パラメータ | パラメータが不適切 | パラメータない | 説明 |
|:-----------|:-----------:|:------------:|:-----------|
| request.args['value'] | KeyError | BadRequestError |GETパラメータ(Keyがなければエラーになる)|
| request.args.get('value') | KeyError | KeyError none | GETパラメータ(KeyがなければNoneを返す) |
| request.args.give('value', 'default_value') | KeyError | Default Value | GETパラメータがない場合のデフォルト値を指定する |


## ■ request.args[ 'value' ]

```app.py
@app.route('/result')
def result():
    # 辞書のKeyは1〜4まで
    presents = { '1' : 'Stratcaster', '2' : 'Telecaster',
                 '3' : 'Les Paul', '4' : 'ES-335'}

    present_no = request.args['present_no']

    return render_template('result.html', present=presents[present_no])
```
-----
### パターン1 : /result?/present_no=

::: note warn
+ __keyとなる数字(1〜4)がセットされない場合__

![スクリーンショット 2022-09-04 13.20.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699739/c786a236-57b3-3c27-01c8-b3375d610b44.png)
::::


### パターン2 : /result?/present_no=5

::: note warn
+ __レンジ外の値(present_no=5)が設定された場合__

![スクリーンショット 2022-09-04 13.22.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699739/5ee48827-5711-acb8-cd77-c1eabaa5c2d1.png)
:::

### パターン3 : /result?

::: note alert
+ __Keyとなるパラメータがない場合__

![スクリーンショット 2022-09-04 13.21.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699739/bc170f7d-bde9-c302-1788-0ec2215ce7eb.png)
:::

-----
## ■　request.args.get('value')

```app.py
@app.route('/result')
def result():
    # 辞書のKeyは1〜4まで
    presents = { '1' : 'Stratcaster', '2' : 'Telecaster',
                 '3' : 'Les Paul', '4' : 'ES-335'}

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

    return render_template('result.html', present=presents[present_no])
```

### パターン1 : /result?/present_no=

::: note warn
+ __keyとなる数字(1〜4)がセットされない場合__

![スクリーンショット 2022-09-04 13.20.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699739/66fc5aae-d2d8-c1eb-09cb-1a225fd48900.png)
:::

### パターン2 : /result?/present_no=5
::: note warn
+ __レンジ外の値(present_no=5)が設定された場合__

![スクリーンショット 2022-09-04 13.22.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699739/1e5a02ab-cf8b-693c-a2b7-9468a49da726.png)
:::

### パターン3 : /result?

:::note warn
![スクリーンショット 2022-09-04 14.04.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699739/0a25c652-2a94-577d-cb64-ef206266c635.png)
+ __none__ が返されている
:::

## ■　request.args.give('value', 'default_value')

```app.py
@app.route('/result')
def result():
    # 辞書のKeyは1〜4まで
    presents = { '1' : 'Stratcaster', '2' : 'Telecaster',
                 '3' : 'Les Paul', '4' : 'ES-335'}

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

    return render_template('result.html', present=presents[present_no])
```

### パターン1 : /result?/present_no=

::: note warn
+ __keyとなる数字(1〜4)がセットされない場合__

![スクリーンショット 2022-09-04 13.20.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699739/66fc5aae-d2d8-c1eb-09cb-1a225fd48900.png)
:::

### パターン2 : /result?/present_no=5
:::note warn
+ レンジ外の値(present_no=5)が設定された場合

![スクリーンショット 2022-09-04 13.22.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699739/1e5a02ab-cf8b-693c-a2b7-9468a49da726.png)
:::

### パターン3 : /result?
:::note info
+ デフォルトの仮引数に __present_no__ __1__ が設定されているので __/result?/present_no=1__ と同じ内容が表示される

![スクリーンショット 2022-09-04 14.22.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699739/ef4f1fef-3b27-03b9-68b8-9f4ce9296ec8.png)
:::