single.php

Djangoでセッション変数をやり取りす手順

Python + Django でアプリケーションで表示されたページにセッション変数を追加する手順を備忘録的に投稿します。

スポンサーリンク

セッション変数

Webブラウザで動作するアプリケーションの基本としてセッションがあります。ブラウザがウェブサーバーと接続する毎にセッションが作られます。セッションはブラウザが接続してやり取りがある限り保持され、ブラウザが切断(閉じる)されると終了します。

セッションが継続している間、変数を保持することができる機能があります。例えばログインしているユーザーやゲストなどを識別して、それぞれ個別のアプリ内で利用する変数を保持しておくことができます。

実装も短期間でできるので、簡単にアプリに追加することができます。

セッション変数を受け渡す手順

公式ドキュメントに記載がありますが、Djangoには3種類のセッション変数の用意があり、今回はデータベースを利用した方法で実装していきます。

利用するためには[manage.py migrate]コマンドを利用してデータベースを有効化しておく必要があります。

具体的にセッション変数に”s1″という名前を付けて受け渡す方法は次の手順で進めます。(djangoプロジェクト[site01]アプリケーション[app01]が作成されてサインイン機能が追加されている前提です)

1. VSCodeを起動してアプリケーション[app01]フォルダー内の[templates\app01]フォルダーに新しく[session.html]を作成して、次のHTMLを追加します。

<html>
    <head>
        <title>セッション変数</title>
    </head>
    <body>
        <h1>session.html</h1>
        <div>s1 = {{ s1 }}</div>
        <div><a href='/app01/set_session/'>set_session</a></div>
        <div><a href='/app01/get_session/'>get_session</a></div>
    </body>
</html>

2. アプリケーション(app01)フォルダー内の[views.py]を開き次のコードを追加します。

def get_session(request):
    s1 = request.session['s1']
    params = {'s1': s1}
    return render(request, 'app01/session.html', params)

def set_session(request):
    request.session['s1'] = 'Hello'
    return render(request, 'app01/session.html', {})

3. アプリケーション(app01)フォルダー内の[urls.py]を開き次のコードを追加します。

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('set_session/', views.set_session, name='set_session'),
    path('get_session/', views.get_session, name='get_session'),
]

4.[ターミナル]画面に次のコマンドを入力して実行します。

python manage.py runserver

5. ブラウザのURL画面に[http://localhost;8000/app01/set_session/]と入力します。

[views.py]内で “s1” 変数に値が代入されています。

6. 画面内の[get_session]リンクをクリックします。

7. 表示された画面に”s1″の値が表示されます。

まとめ

Djangoの[request.session]を使うことで、セッション変数を取り扱うことができます。セッションは、データベース、キャッシュ、クッキーなどを使う3種類がありますが、データベースを有効化するだけで利用できるので、データベースを使う方法が最も簡単に追加することができます。

Python + Djangoのプロジェクトでセッション変数を受け渡す方法の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です