Cookieを使う - bottle
bottleでCookieを使う
Cookieの保存
response.set_cookie('userId', 'tamago', max_age=15552000)
max_age
を設定しないと、ブラウザを閉じてしまうと消えてしまう
Cookieの取得
request.get_cookie('userid')
Cookieの削除
response.delete_cookie('userid')
サンプルコード
以下のようなmain.pyを作成する
max_age
を設定しなかった場合、ブラウザを閉じてしまうとCookieは消えることを確認してみた
from bottle import route, run, response, request @route('/test1') def test1(): # max_ageは設定しない response.set_cookie('userId', 'tamago') return 'クッキーに保存' @route('/test2') def test2(): return f'クッキーから取得{request.get_cookie("userId")}' run(host='localhost', port=3000, debug=True, reloader=True)
localhost:3000/test2 にアクセス:「クッキーから取得tamago」が表示
一回、ブラウザを閉じて localhost:3000/test2 にアクセスすると、「クッキーから取得None」が表示される。これは、max_age
を設定していないため消えてしまった
Cookieの署名
Cookieはクライアント側で改変できてしまうため、サーバー側で設定したものかどうかを確認しないといけない。そのために、Cookieを保存、取得するときに署名キーを引数に渡すこと。署名キーが一致しなければ、Noneが返されるようになっている。
secret
に署名キーを設定する
# 保存 response.set_cookie('name', 'tamago', secret='secret-key-abc') # 取得 request.get_cookie('name', secret='secret-key-abc')
Tutorial — Bottle 0.13-dev documentation
参考文献
equal to 操作の "Japanese_CI_AS" と "Japanese_CS_AS_KS_WS" 間での照合順序の競合を解決できません。 ってエラー
英訳すると
Cannot resolve the collation conflict between %1 and %2 in the %3 operation
複数のテーブルで照会順序が合っていないときにおこる?
以下のSQLでテーブル内の照合順序を確認したが、一致しているか確認できる。
SELECT col.name, col.collation_name FROM sys.columns col WHERE object_id = OBJECT_ID('YourTableName')
全てのテーブルの荘厳順序が一致していなかった!!
参考文献
DB接続のタイムアウト - VB.NET
タイムアウトには「コネクションタイムアウト」と「コマンドタイムアウト」の2つがあるらしい。
タイムアウト時間を設定するためのプロパティがある
タイムアウト時間の初期値
タイムアウトに0を設定すると、無期限になる。これは、ずっと待ってしまうため、危険かな?
サンプルコード
SqlConnectionにタイムアウト時間を設定
' タイムアウト時間を1分に設定 Dim SECONDS as Integer = 60 Dim TIMEOUT=MIN As Integer = 1 sqlCon = New SqlConnection("Data Source = " & SERVER_NAME & ";Initial Catalog = " & DATABASE_NAME & ";User ID = " & USER_ID & ";Password = " & PASSWORD & ";Connection Timeout = " & SECONDS * TIMEOUT_MIN)
タイムアウトの時間は初期値で、リトライする処理でもいいのかもって思った
SqlCommandにタイムアウト時間を設定
Dim sqlCmd As New SqlCommand With { .Connection = SqlCon, .CommandType = CommandType.Text, .Transaction = tran, .CommandTimeout = SECONDS * TIMEOUT_MIN }
参考文献
redirectする - bottle
bottleでリダイレクトをする方法
/abc
にアクセスしたら、/def
にリダイレクトしたい
from bottle import route, run from bottle import redirect @route('/abc') def test1(): redirect('/def') @route('/def') def test2(): return 'defのページ' run(host='localhost', port=3000, debug=True, reloader=True)
redirect
をインポート- redirect(リダイレクト先のURL)でリダイレクトできる
/abc
にアクセスすると、/def
に飛ばされて、「defのページ」って表示された
/abc?name=fafie;afjiekafjdif;ejgnieaojfe
とかのときに使えるかな?
参考文献
__init__.pyについて
Pythonでの__init__.py
について調べてみた
__init__.py
の役割
__init__.py
があるディレクトリをパッケージとして扱えるようになる(Python3からは__init__.py
が無くてもパッケージとして認識されるようになった)- 初期化処理を記述できる
パッケージとして扱えるようにする
以下のようなフォルダを作成する
. ├── pkg │ ├── __init__.py │ └── import_test.py └── test.py
# ./pkg/import_test.py print('import_test.py is imported!') def print_name(): print(__name__)
# ./test.py from pkg import import_test if __name__ == '__main__': import_test.print_name()
pkg
内に__init__.py
を作成しておくだけで、pkgをパッケージとして扱えるようになる。パッケージ内のファイルにインポートするにはfrom パッケージ名 import ファイル名
とする
test.pyの実行
$ python test.py import_test.py is imported! pkg.import_test
参考文献
Windows10でディスク使用料が高くなったときの対処
タスクマネージャー> リソースモニター で見てみると、以下のプロセスがディスク使用量が高かった。不要なものは停止して、様子を見てみた
- CompatTelRunner.exe
CompatTelRunner.exe
CompatTelRunner.exeは「カスタマーエクスペリエンス向上プログラム」というものの一種らしい。プログラムの利用統計をMicrosoftに送るらしい。いらないこれ!!
停止する
タスクマネージャー > タスクスケジューラライブラリ > Microsoft > Windows > Applicasion Experience > Microsoft CompatTelRunner を選択し、「終了」と「無効」を行う。
※ Microsoft > Windows > Applicasion Experience > ProgramDataUploader も「無効」にしておいた。