水曜日, 2月 17, 2021

Flask/wtform/SelectField フォームで入力チェックがうまくいかないとき

 Flask の wtform は入力値の自動チェックを行うので便利なんですが、自動チェックさせるとときどき引っかかるので面倒です。

SelectField を使うなら値はしっかり設定しておかねば入力値はすべてはじいてくれます。選択肢をデータベースからひいてきて自動設定している場合なぞ要注意です。

SelectField を設定する関数を書けば便利です。

def prepare_verseform(form):
try:
with engine.connect():
form.lang.choices = [(0, "-")]
form.genre.choices.append((0, '-'))
langlist = db.session.query(Lang).all()
for item in langlist:
form.lang.choices.append((item.id, item.lang))
genrelist = db.session.query(Genre).all()
for item in genrelist:
form.genre.choices.append((item.id, item.genre))
return form
except Exception as e:
return None
view raw form.py hosted with ❤ by GitHub

Form をインスタンス化しただけで form.validate() をついかけてしまうような間違いを防ぐことができます。

月曜日, 2月 15, 2021

Flask/url_for() で引数を省略

Flask ではルートを指定して動作を指定します。動作は関数で記述します。Flask は指定された関数を起動します。

引数を指定することもできます。引数は<引数>の形で指定、関数の引数で受け継ぎます。この引数を省略できるのか、っていう問題です。

Python の関数はデフォルト値を持つ引数は省略できます。そのノリでそのまま引数のデフォルト値を指定してもルートは判別しません。

ここは引数なしのルートを指定してやります。関数のほうはデフォルト値を指定することで対処します。ここでルートの最後の/(スラッシュ)を指定します。

これで url_for() で引数を省略できます。


@ app.route('/mbr/profile/')
@ app.route('/mbr/profile/<member_username>')
def mbr_profile(member_username=None):
pass
view raw urlfor.py hosted with ❤ by GitHub

Qt: 外部プログラムを起動する

  Qt/C++ のアプリは、外部へ直接アクセスできます。これはネットアプリでは不可能な Qt のメリットです。 外部プログラムを起動することもできます。QProcess::startDetached() を使うと独立したプロセスを立ち上げることができます。 この QProces...