request.getとrequest.GETの違いを解説【順を追って説明します】

request.getと、request.GET.getの違いについて学んでいきましょう。

request.getとrequest.GETの違いは?

一言で言うと、request.getはpythonの文法であり、request.GETはdjangoの文法とイメージすると分かりやすいです。

また、request.GETを使うと、getリクエストを送った時のパラーメーターも取得できるということが特徴です。

順番に理解を進めていきましょう。
request.getを分解する

まずはrequest.getです。

これは、requestという名前のオブジェクトに対し、getメソッドを実行しています。

この時、requestオブジェクトは辞書型のデータであることを意識しましょう。

具体的なコードでみていきます。


[コード]

request = {'key':10, 'animal':'cat'}
request.get('key')

[アウトプット]

10

requestというオブジェクトに対し、getメソッドを使ってデータを取り出しました。

getメソッドが使えるのは、辞書型のオブジェクト

ただ、一つ注意することがあります。

それは、getメソッドが使えるのは辞書型のオブジェクトということです。

djangoでfunction based viewを定義した時の引数として設定する「request」は辞書型のデータではないことに注意しましょう。

試しにrequest.getを取得してみます。


[コード]

def fbv(request):
     print(request.get(''))
    return HttpResponse('')

[コマンドライン]

AttributeError: 'WSGIRequest' object has no attribute 'get'

WSGIRequestオブジェクトはget属性がありません、というエラーが出てしまいました。

つまり、requestは辞書型のオブジェクトではないのです。
request.GETを分解する

次に、request.GETについてみていきましょう。

request.GETはdjangoで使われます。

さきほど確認しましたが、requestはHttpリクエストが送られたときにDjangoが作るオブジェクトです。

そして、request.GETを実行することで、requestの情報を辞書型のデータで取得することができるようになります。

つまり、request.GETとすることにより、getメソッドを使ってデータを取得することができるようになるのです。

実際のコードで確認

request.GETで実際にデータを取得してみましょう。

なお、基本的なコードの設定は初期設定コードという記事に書いていますので参考にしてください。

まずは、前提として、以下のurlを書いた場合を見ていきます。

http://localhost:8000/fbv/?q=100

urlにq=100というパラメーターを加えました。

このパラメーターをrequest.GETで取得してみましょう。


[コード]

def fbv(request):
     print(request.GET['q'])
    return HttpResponse('')

[コマンドライン]

100

しっかりとurlのパラメーターが取得できていることが確認できました。

辞書に無いデータを参照した場合

さらにrequest.GETに対する理解を深めていきましょう。

例えば、request.GET型の辞書にないパラメーターを参照した場合はどうなるでしょうか?

実際のコードで見ていきましょう。


[コード]

def fbv(request):
     print(request.GET['somekey'])
    return HttpResponse('')

[コマンドライン]

django.utils.datastructures.MultiValueDictKeyError: 'somekey'

エラーが出てしまいました。

request.GET.getが便利

ですので、djangoでは、requestの内容を取り出すときは、request.GET.getを使うことが一般的です。

なぜなら、getメソッドは、対象とするデータがない場合、Noneを返してくれるからです。

これも実際のコードで確認していきましょう。


[コード]

def fbv(request):
     print(request.GET.get('somekey'))
    return HttpResponse('')

[コマンドライン]

None

Noneが返ってきていることが確認できました。

request.getとrequest.GETのまとめ



(1) get()はpythonのメソッド。対象は辞書型のデータ。

(2) djangoのrequestは辞書型ではない。

(3) requestを辞書型に変えるのがrequest.GET。

(4) エラーを出さないためには、request.GET.getを使うことが一般的。

~Django無料講義~のご案内

Code for Djangoが、4時間超の無料Django講義をはじめました
 
・本を出版したCode for Djangoの
 製作者が作ったサイトです。
 
・Code for Djangoの内容も、
 動画で詳しく解説しています。
 
・動画は順次ふやしていきますので、
 ただで学び続けることが可能です。
 
・Djangoの効率的なスキルアップに、
 是非お役立て下さい。

                                                                 Django講義はこち
Created with