SelectFieldの設定値を記憶させて次のセッションでそれを入れさせようとあれこれ考えたが、なかなかうまくいかない。
そこで違ったアプローチでの実現を考える。
要するに前回の検索値のセットをまとめて記憶しておいて、画面上の検索入力をすっ飛ばして記憶した検索値で検索をかけさせればいいわけだ。
やはりlocalStorageを使うのが良かろう。
段取りとしては
- 検索項目に「前回の検索設定を使う」ボタンを設置する。(最初の検索時にはこのボタンはオフにしておく。デフォルトはオフがいいか?)
- 検索Fieldに普通に色々設定して検索する。同時にその検索値をlocalStorageに保存する。
- 2回目以降の検索時には、まず「前回の検索設定を使う」ボタンを見る。
- オンならlocalStorageから読み出した値で検索実行
- オフならwtformから検索項目を逐次読み取って検索実行。同時にその検索値をlocalStorageに保存する。
- 以後繰り返し。
前回の設定値はどこかに表示されているとわかりやすいかな。
と、思ったんだが、そもそもlocalStorageはブラウザの機能でjavascriptで使うんだった。検索はpythonでやってるからだめじゃん。
こりゃ設定値をSQLに書き込むとかしないといかんのか?
検索中。。。。検索中。。。。
http://inner2.hatenablog.com/entry/2015/12/01/211329
configparserというpythonモジュールを使って設定値を保存、そこから設定値を読み取ってSQL検索といけそうな予感。
早速先日作ったテスト用dbで試してみよう。
import configparser from configparser import ConfigParser, ExtendedInterpolation ......... @app.route("/", methods=['GET', 'POST']) def index(): ......... search_set = {'name' : form.name.data, 'gene' : form.gene.data, 'count' : form.count.data, 'inhe' : form.inhe.data, 'zygo' : form.zygo.data} config = configparser.ConfigParser(interpolation=ExtendedInterpolation()) config['search_set'] = search_set with open('config.txt', 'w') as configfile: config.write(configfile)
こんな感じのコードを検索式の下に置くと、WTformに設定した値をconfig.txtに保存できた。
ちょっとしたコツとしてはinterpolation=ExtendedInterpolation()を入れておくことで%をちゃんと保存してくれる。(入れないとエラーが出る)
http://ytyaru.hatenablog.com/entry/2017/03/28/000000
[search_set] name = %1% gene = %2% count = 15 inhe = recessive zygo = %hom%
config.txtはこんな感じにできる。
次はこの設定を読み込んで検索に使う。
@app.route("/", methods=['GET', 'POST']) def index(): form = TestForm() if form.prev.data: config = configparser.ConfigParser(interpolation=ExtendedInterpolation()) config.read('config.txt') form.name.data = config['search_set']['name'] form.gene.data = config['search_set']['gene'] form.count.data = config['search_set']['count'] form.inhe.data = config['search_set']['inhe'] form.zygo.data = config['search_set']['zygo']
今度は検索式の上に前の検索値を使う場合の場合分けを作り、formから読み取った値を乗っ取ってしまうようにした。
動作は良好で、ちゃんと機能した。あとは前回設定値を表示させればそれでOKかな。
と、思ったんだが、これ、ユーザーが複数居たらバッティングしてしまうことに思い至った。サーバーサイドに設定ファイルを置いちゃダメだな。これをやるならユーザーにログインしてもらって、自分の作業ディレクトリで検索をしてもらわないと。
一旦お蔵入り。