djangoの関数ビューやrender()で使うrequest。
このrequestを何気なく使いますが、このrequestってなに?と疑問に思う方も多いと思います。
以下のコードのような感じに手軽にrequestを使っていますが、このrequestってなんでしょう?
def sample(request):
if request.method == 'POST':
do_something()
elif request.method == 'POST':
do_something_else()
return render(request, 'sample.html')
本記事では、このrequestに関して、何が入っているのか、使う場面はいつがあるのかを紹介していきます。
requestとは
このrequestは簡単に言えば、HttpRequestオブジェクトのことです。
HttpRequestオブジェクトはdjango内で、システムを通じてステータスを渡すものになります。
と書いても分かりにくいですね。もう少し説明します。
訪問者があるページのURLをふんだ際に、該当ページを出力するようにリクエストが発生します。
そのリクエストが発生された時に、djangoはリクエストに関するデータを含んだHttpRequestオブジェクトを作ります。
するとdjangoは作成したHttpRequestオブジェクトをdjango内のシステム(views.pyなど)に最初のオブジェクトとして渡します。
渡した後、システム内でHttpRequestオブジェクトの読み込みを行い、返り値としてHttpResponseオブジェクトを返します。
この説明であったHttpRequestオブジェクトが「request」の正体です。
requestの中身は?
では、request(HttpRequestオブジェクト)の中身を見ていきます。
requestは複数の属性を持っています。一例として以下にざっと並べます。
HttpRequest.scheme
リクエストのスキーム(httpかhttpsか)を表す文字列です
HttpRequest.body
データを送る際にバイト列でリクエストボディとして送信されます。
HttpRequest.path
スキーマやドメインを含まないページのフルパスを表す文字列です。
HttpRequest.path_info
pathと同様ページのフルパスを表す文字列です。
pathと異なる部分は、テストサーバとデプロイサーバ間の移動で問題が起こりにくいコードになります。
たとえば、アプリケーションの WSGIScriptAlias が”/minfo” に設定されている場合
path が “/minfo/music/bands/the_beatles/” である
一方、path_info は “/music/bands/the_beatles/” となる可能性があります。
HttpRequest.method
リクエストで使用するHTTPメソッドを表す文字列です。
つまりは、「POST」や「GET」などを持ちます。このHTTPメソッドは使用頻度が高いです。
HttpRequest.encoding
送信データのデコードに使用されるエンコードを表す文字列です。
HttpRequest.content_type
リクエストの MIME タイプを表す文字列です。
HttpRequest.content_params
CONTENT_TYPE ヘッダに含まれる、キーと値のパラーメータのディクショナリです。
HttpRequest.COOKIES
すべてのクッキーが格納されたディクショナリです。キーと値は文字列です。
HttpRequest.FILES
アップロードされたすべてのファイルを含む辞書のようなオブジェクトです。
HttpRequest.META
利用できるすべての HTTP ヘッダーが格納されたディクショナリですが、複数あるので割愛します。
HttpRequest.headers
リクエストの全てのHTTPヘッダーへアクセスを提供する辞書のようなオブジェクトです。
HttpRequest.resolver_match
解読されたURLを表すResolverMatchのインスタンスです。
requestの使用時の注意事項
結構多くの属性がrequest(HttpRequestオブジェクト)に入っています。
これらを呼び出すときは、”request.method“などと表記します。
ここでHttpRequestではなく”request“を頭につけて呼び出します。
参考URLは”https://docs.djangoproject.com/en/3.2/ref/request-response/“
最後に
djangoをより学びたい場合の関連記事です。
djangoをレベル別で書籍を使用し、順序よく学びたい方におすすめの本を紹介している記事です。
djangoを初めて学ぶ初学の方から、基礎を学び終えた初級の方、アプリを作った・作っている中級の方の3種のレベルに分けておすすめの本を紹介しています。
また、動画で学びたい方はこちらの記事をおすすめします。
djangoをこれから学ぶ方から、アプリ開発したいけどやり方がわからない!って方におすすめです。
Udemyでおすすめな厳選django動画教材を紹介します。