【django】 requestてなに?

スポンサーリンク
Django

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動画教材を紹介します。

タイトルとURLをコピーしました