前提・実現したいこと
Flaskでwebアプリケーションを作っています。
wtformsを使いdefaultの設定をして、既存のデータを編集するformを作りたいです。
発生している問題・エラーメッセージ
defaultの値を設定することはできたのですが、編集後のvalidateが通りません。
flaskのloggerを使ってform.errors
を出力しています
'csrf_token': ['The CSRF token is missing.']
該当のソースコード
現象を再現する最小限のソースコードです。
python
1from flask import Flask, render_template 2from flask_wtf import FlaskForm 3from wtforms.fields import StringField, SubmitField 4 5app = Flask(__name__) 6 7app.config.update( 8 DEBUG = True, 9 SECRET_KEY = 'you_will_never_guess' 10) 11 12 13#default value 14default_value ={ 15 "name" : "Taro", 16 "address" : "taro@example.com" 17} 18 19 20#form to set default value 21class MainForm(FlaskForm): 22 name = StringField("name") 23 address = StringField("address") 24 submit = SubmitField("submit") 25 26 27@app.route("/", methods=["GET", "POST"]) 28def main(): 29 form = MainForm() 30 31 keys = ["name", "address"] 32 for key in keys: 33 field = getattr(form, key) 34 value = default_value[key] 35 setattr(field, "default", value) 36 form.process() 37 38 if form.validate_on_submit(): 39 default_value["name"] = form.name.data 40 default_value["address"] = form.address.data 41 app.logger.debug(default_value) 42 43 app.logger.debug(form.errors) 44 return render_template("main.html", form=form) 45 46if __name__ == "__main__": 47 app.run()
html
1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6</head> 7<body> 8 <form action="/" method="POST"> 9 {{form.csrf_token}} 10 {{form.name.label}}{{form.name}}<br> 11 {{form.address.label}}{{form.address}}<br> 12 {{form.submit}} 13 </form> 14</body> 15</html>
試したこと
htmlファイルの{{form.csrf_token}}
を{{form.csrf_token()}}
や{{form.hidden_tag()}}
に変えてみましたが状況は変わりませんでした。
form.csrf_tokenにもデフォルトの値を入れてみましたがThe CSRF token is invalid
と出力されました。
補足情報(FW/ツールのバージョンなど)
Flask 1.1.1
Flask-WTF 0.14.2
WTForms 2.2.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/27 04:56