Djangoでセッションを使用する

Index

1. はじめに

本稿では、Django での session 管理をして、ログインやログアウトの実装をしてみる。

2. 環境

% python3 --version
Python 3.5.2
% python3 -m django --version
1.10.8

3. ファイル構成

% ls
manage.py  myapp/  mysite/

% ls mysite
__init__.py  __pycache__/  settings.py  urls.py  wsgi.py

% ls myapp
__init__.py   admin.py  migrations/  tests.py  views.py
__pycache__/  apps.py   models.py    templates/  urls.py

4. セッション有効設定

mysite/setting.py に以下の記述があるのを確認する(なければ追加する)。

INSTALLED_APPS = [
  ...
  'django.contrib.sessions',
  ...
]

MIDDLEWARE = [
  ...
  ‘django.contrib.session.middleware.SessionMiddleware',
  ...
]

また、必要に応じて以下を実行する。

% python3 manage.py migrate

5. セッション操作

セッションにデータを保存する

request.session['name'] = name

セッションにデータがあるか確認する

if 'name' in request.session:

セッションからデータを読み込む

name = request.session['name']

セッションのデータを削除する

del request.session['name']

セッションをクリアする

request.session.clear()

セッションとクッキーを削除する

request.session.flush()

6. サンプルコード

viewsは以下のようにする。

# myapp/views.py
from django.shortcuts import render

def index(request):
    logged_in = False
    name = None

    if 'name' in request.POST and 'passwd' in request.POST:
        request.session['name'] = request.POST['name']
        request.session['passwd'] = request.POST['passwd']

    if 'logout' in request.POST:
        request.session.clear()

    if 'name' in request.session and 'passwd' in request.session:
        name = request.session['name']
        logged_in = True

    return render(request, "index.html", {'loggedIn':logged_in, 'name':name})

また、index.htmlを作成する。

<!-- myapp/templates/index.html -->
<!DOCTYPE html>
<html>
  <head>
  </head>

  <body>
    <form action="" method="post">
      {% csrf_token %}
      {% if not logged_in %}
      <input type="text" name="name" required />
      <input type="password" name="passwd" required />
      <input type="submit" value="submit">
      {% else %}
      <p>Hello {{ name }}!</p>
      <input type="submit" value="logout" name="logout" />
      {% endif %}
    </form>

  </body>
</html>

実行して、localhost:8000 にアクセスすると、以下の画面が表示される。
f:id:Garfields:20171106222328p:plain

ログインしてみる f:id:Garfields:20171106222226p:plain

また、ログアウトボタンを押すと、セッションを削除し、ログアウトすることができる。

関連記事

http://python.zombie-hunting-club.com/index#Web

書籍

入門 Python 3

入門 Python 3

Pythonスタートブック

Pythonスタートブック

パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)

  • 作者: Pythonサポーターズ,露木誠,ルイス・イアン,石本敦夫,小田切篤,保坂翔馬,大谷弘喜
  • 出版社/メーカー: 技術評論社
  • 発売日: 2013/03/05
  • メディア: 大型本
  • 購入: 1人 クリック: 65回
  • この商品を含むブログ (30件) を見る

Pythonプロフェッショナルプログラミング 第2版

Pythonプロフェッショナルプログラミング 第2版