Python3 Bottleフレームワーク入門(その5)- Cookie And Session
2017/08/25
2019/12/06
タグ: Bottle, Python, クッキー, セッション
本チャプターでは、クッキー、セッションまわりについて解説します。クッキーはご存じの通り一度来訪するとその時の行動でアクションした記録が残り次回の来訪時にその情報が適用されてWEB画面に反映される仕組みである。またセッションはログインしている状態を記録し、ページ遷移や次回のブラウザ起動時にログイン無しでページに入れる仕組みなどに使われます。
クッキーの仕組みは標準でBottleから利用できるため特に特殊なライブラリーを新規で導入することはありません。response関数で設置することができます。
クッキーの設定例
下記は、ブラウザーからhttp://xxx.xxx.xxx.xxx/counterを表示させリロードするとその度にカウンタ値があがるプログラムです。サーバを終了してもクッキーが残っているためまた起動してテストすると前回の値から加算されてゆきます。ブラウザをとじて再テストしても同様です。クッキーはブラウザー側に残っているためこのようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
from bottle import Bottle,run,route, request, response app=Bottle() @app.route('/counter') def counter(): count = int( request.cookies.get('counter', '0') ) count += 1 response.set_cookie('counter', str(count),max_age=2678400) #最大31日有効 return 'You visited this page %d times' % count if __name__ == "__main__": run(app=app,host="0.0.0.0",port='8080',debug=True) |
クッキーの削除
今度はクッキーのリセット機能を追加しました。下記のようにクッキーのエイジングを0にしてカウンタ値も一旦空にします。これが事実上のクッキーの削除のようなものです。ブラウザーからhttp://xxx.xxx.xxx.xxx/resetを表示させ再度カウンター表示のページに飛ぶとカウンターが1からスタートしていることがわかります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
from bottle import Bottle,run,route, request, response app=Bottle() @app.route('/counter') def counter(): count = int( request.cookies.get('counter', '0') ) count += 1 response.set_cookie('counter', str(count),max_age=2678400) #最大31日有効 return 'You visited this page %d times' % count @app.route('/reset') def reset(): response.set_cookie('counter','',max_age=0) #クッキーのリセット return 'Now Counter is clear' if __name__ == "__main__": run(app=app,host="0.0.0.0",port='8080',debug=True) |
セッションの機能を使う
セッションの機能を使うにはBottleの場合、Beakerというモジュールを使うことができます。インストールはpipコマンドで 導入してください。
1 |
$ pip3 install Beaker |
先程のクッキーのカウントアッププログラムと同じ要領でブラウザーからアクセスしてみてください。結果的にクッキーと同じような動作を確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
from bottle import Bottle,run,route, request, response from beaker.middleware import SessionMiddleware session_opts = { 'session.type': 'file', 'session.cookie_expires': 300, 'session.data_dir': './data', 'session.auto': True } app = Bottle() apps = SessionMiddleware(app, session_opts) @app.route('/counter') def counter(): count = request.environ.get('beaker.session') count['times'] = count.get('times',0) + 1 count.save() return 'You visited this page %d times' % count['times'] if __name__ == "__main__": run(app=apps,host="0.0.0.0",port='8080',debug=True) |
セッションの削除の様々なパターン
一口に削除と言っても様々なパターンがある。値を初期化する。データを削除する。今のセッションを廃棄する。プログラムの流れ用途によってどれを使うか考えて使いましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
from bottle import Bottle,run,route, request, response from beaker.middleware import SessionMiddleware session_opts = { 'session.type': 'file', 'session.cookie_expires': 300, 'session.data_dir': './data', 'session.auto': True # 'session.httponly': True, # 'session.secure': True } app = Bottle() apps = SessionMiddleware(app, session_opts) @app.route('/counter') def counter(): count = request.environ.get('beaker.session') count['times'] = count.get('times',0) + 1 count.save() return 'You visited this page %d times' % count['times'] #保存値をリセットする処理 @app.route('/reset') def reset(): count = request.environ.get('beaker.session') count['times'] = 0 count.save() return 'Now Counter Clear' #セッションを溜めるフォルダー毎データ削除 @app.route('/delete') def delsession(): count = request.environ.get('beaker.session') count.delete() return 'Now Session Delete' #セッションの廃棄 @app.route('/invalid') def invalid(): count = request.environ.get('beaker.session') count.invalidate() return 'Now Session invalidated' if __name__ == "__main__": run(app=apps,host="0.0.0.0",port='8080',debug=True) |
- Python Bottle Framework入門 全13回
- 1.基礎編サーバ起動
- 2.リクエストメソッド
- 3.ORM Peewee (MySQL)
- 4.ORM Peewee CRUD
- 5.Cookie And Session
- 6.Abort and Redirect
- 7.マルチスレッドWEBサーバ
- 8.デーモン化
- 9.Json
- 10.WSGI on SSL
- 11.Apache連携起動(外部WSGI) SSL接続
- 12.Apache連携起動(ReverseProxy)SSL接続
- 13.hprox連携起動(ReverseProxy)SSL接続&HTTP2対応