前提
vscodeを使って、Pythonでwebアプリケーションを作成しています。
一度入力してもらったデータを保持して、他のデータ保存に作成したいです。
python
1 2return render_template('login.html', data = data) 3@egamipro.route('/result', methods=["POST"]) 4def egamipro_post(): 5 con = get_db() 6 bangou = request.form["bangou"] 7 name = request.form["name"] 8 password = request.form["password"] 9 cur = con.execute("select count(*) from user where クラス番号=? and 名前=? and パスワード=?" ,(bangou,name,password)) 10 data = cur.fetchall()
ここで受け取った変数を別のHTMLに送信したいです。
また、開始時間と終了時間だけを更新したいです。
実現したいこと
入力して変数に保存された値を、同じpyファイルの中で使用したい。
既に保存されている情報を認証し、そのレコードの開始時間、終了時間だけを更新したい。
ここに実現したいことを箇条書きで書いてください。
- ▲▲機能を動作するようにする
している問題・エラーメッセージ
発生
BadRequestKeyError
werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
KeyError: 'bangou'
(@egamipro.route('/jikan', methods=["POST"])
def jikan_post():
# テンプレートから新規登録する商品名と値段を取得
bangou = request.form["bangou"])
のbangou=request.form["bangou"]を消すと波線が出ます。
エラーメッセージ
HTML
<!DOCTYPE html> <html lang="jp"> <head> <meta charset="UTF-8"> <title>僕たちは不当に労働させられています</title> </head> <body><input type="time" id="time" name="kaisi" value="" /> <label for="time">終了日時:</label> <input type="time" id="time" name="owari" value="" /><form action='/jikan'> <p><新規登録></p> <label for="time">開始時間:</label>
</body> </html><button type="submit" formmethod="POST">登録</button> </form>
```python ソースコード import sqlite3 from flask import Flask,render_template,request,g egamipro = Flask(__name__) def get_db(): if 'db' not in g: # データベースをオープンしてFlaskのグローバル変数に保存 g.db = sqlite3.connect('EGAMIDB.db') return g.db @egamipro.route('/') def index(): # データベースを開く con = get_db() # テーブル「商品一覧」の有無を確認 cur = con.execute("select count(*) from sqlite_master where TYPE='table' AND name='user'") for row in cur: if row[0] == 0: # テーブル「商品一覧」がなければ作成する cur.execute("CREATE TABLE user(クラス番号 TEXT PRIMARY KEY,名前 TEXT NOT NULL,パスワード TEXT NOT NULL,開始日時 TEXT,終了日時 TEXT,メッセージ TEXT,ラズパイID INTEGER)") # レコードを作る # 商品一覧を読み込み cur = con.execute("select * from user") data = cur.fetchall() con.close() return render_template('login.html', data = data) @egamipro.route('/result', methods=["POST"]) def egamipro_post(): con = get_db() bangou = request.form["bangou"] name = request.form["name"] password = request.form["password"] cur = con.execute("select count(*) from user where クラス番号=? and 名前=? and パスワード=?" ,(bangou,name,password)) data = cur.fetchall() if data[0][0] == 0: return render_template('err.html') else: return render_template('menyu.html',data=data) @egamipro.route('/day', methods=["POST"]) def day_post(): # テンプレートから新規登録する商品名と値段を取得 return render_template('jikan.html') @egamipro.route('/jikan', methods=["POST"]) def jikan_post(): # テンプレートから新規登録する商品名と値段を取得 bangou = request.form["bangou"] name = request.form["name"] password = request.form["password"] kaisi = request.form["kaisi"] owari = request.form["owari"] # データベースを開く con = get_db() # 登録処理 sql = "INSERT INTO user(クラス番号,名前,パスワード,開始日時,終了日時)values('{}','{}','{}','{}','{}')".format(bangou,name,password,kaisi,owari) con.execute(sql) con.commit() # 一覧再読み込み cur = con.execute("select * from user order by クラス番号") data = cur.fetchall() con.close() return render_template('jikan.html', data = data) @egamipro.route('/kanri', methods=["POST"]) def kanri_post(): # データベースを開く con = get_db() # テーブル「商品一覧」の有無を確認 cur = con.execute("select count(*) from sqlite_master where TYPE='table' AND name='KanrisyaLOGIN'") for row in cur: if row[0] == 0: # テーブル「商品一覧」がなければ作成する cur.execute("CREATE TABLE KanrisyaLOGIN(ID TEXT , パスワード INTEGER)") # レコードを作る cur.execute( """INSERT INTO KanrisyaLOGIN(ID, パスワード) values(10, 123456) """) con.commit() # 商品一覧を読み込み cur = con.execute("select * from KanrisyaLOGIN") data = cur.fetchall() con.close() return render_template('index_K.html', data = data) @egamipro.route('/result_K', methods=["POST"]) def result_Kpost(): con = get_db() id = request.form["id"] password = request.form["password"] cur = con.execute("select count(*) from KanrisyaLOGIN where id=? and パスワード=?" ,(id,password)) data = cur.fetchall() if data[0][0] == 0: return render_template('err.html') else: return render_template('kanrimenyu.html',data=data) if __name__ == '__main__': egamipro.debug = True egamipro.run(host='localhost')
試したこと
セッションの保持、変数でのデータ保持
補足情報(FW/ツールのバージョンなど)
vscode
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー