質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

606閲覧

pythonで指定したhtmlに飛ばず、先に処理が始まってしまう

nemotonkatu

総合スコア18

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/11/09 03:04

前提

ここに質問の内容を詳しく書いてください。
(例)
pythonのflaskを使用してwebアプリケーションを作成しています。
何故か、指定した先と違うところに飛んでしまいエラーを起こしてしまいます。
具体的な動きは、login.htmlからresultで処理して、lazupai.htmlに渡し、lazupaiでデータベースを更新するという動きをしたいのですが、何故かlazupai.htmlを経由せずにrazupaiでの処理が始まってしまいます

実現したいこと

・指定先に正しく飛ぶ

発生している問題・エラーメッセージ

BadRequestKeyError werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand. KeyError: 'lazupai' egamipro.py", line 50, in lazupai_post return render_template('login.html', data = data) @egamipro.route('/lazupai',methods=["POST"]) def lazupai_post(): lazupai = request.form["lazupai"]

該当のソースコード

python

1import sqlite3 2from flask import Flask,render_template,request,g 3from flask import redirect 4from flask import url_for 5from flask import make_response 6 7 8 9egamipro = Flask(__name__) 10 11def get_db(): 12 if 'db' not in g: 13 # データベースをオープンしてFlaskのグローバル変数に保存 14 g.db = sqlite3.connect('EGAMIDB.db') 15 return g.db 16 17@egamipro.route('/') #テーブルを検索して無ければ作成する、ログインページに飛ぶ 18def index(): 19 20 # データベースを開く 21 con = get_db() 22 23 24 # テーブル「商品一覧」の有無を確認 25 cur = con.execute("select count(*) from sqlite_master where TYPE='table' AND name='nemoto'") 26 27 for row in cur: 28 if row[0] == 0: 29 # テーブル「商品一覧」がなければ作成する 30 cur.execute("CREATE TABLE nemoto(クラス番号 TEXT PRIMARY KEY,名前 TEXT NOT NULL,パスワード TEXT NOT NULL,開始時間 INTEGER,開始分 INTEGER,終了時間 INTEGER,終了分 INTEGER,メッセージ INTEGER,ラズパイID INTEGER)") 31# レコードを作る 32 cur.execute( 33 """INSERT INTO nemoto(クラス番号,名前,パスワード,開始時間,開始分,終了時間,終了分,メッセージ,ラズパイID) 34 values('GOOD01', '板井ヒロッキー','miyazaki',12,30,15,30,0,1), 35 ('R4A106', '江上凜','good',9,00,16,45,0,2) 36 """) 37 con.commit() 38 39 # 商品一覧を読み込み 40 cur = con.execute("select * from nemoto") 41 data = cur.fetchall() 42 con.close() 43 44 45 46 return render_template('login.html', data = data) 47 48@egamipro.route('/lazupai',methods=["POST"]) 49def lazupai_post(): 50 lazupai = request.form["lazupai"] 51 name = request.cookies.get('name') 52 bangou = request.cookies.get('bangou') 53 con = get_db() 54 sql = "UPDATE kfc SET クラス番号='{}',名前='{}' where ラズパイID = {}".format(bangou,name,lazupai) 55 sql = "UPDATE nemoto SET ラズパイID={} where クラス番号 = {}".format(lazupai,bangou) 56 con.execute(sql) 57 con.commit() 58 return render_template('menyu.html',name=name) 59 60 61@egamipro.errorhandler(404)#エラーを受け取ったらここに飛ぶ 62def page_not_found(error): 63 return render_template('page_not_found.html'), 404 64 65@egamipro.route('/result', methods=["POST"])#ログインページの情報と入力された情報を照合する。cokkieにデータを登録 66def result_post(): 67 con = get_db() 68 bangou = request.form["bangou"] 69 name = request.form["name"] 70 password = request.form["password"] 71 cur = con.execute("select count(*) from nemoto where クラス番号=? and 名前=? and パスワード=?" ,(bangou,name,password)) 72 data = cur.fetchall() 73 74 75 76 if data[0][0] == 0: 77 return render_template('err.html') 78 else: 79 res = make_response(redirect(url_for('home'))) 80 res.set_cookie('bangou',bangou) 81 res.set_cookie('name',name) 82 83 84 return res 85 86 87@egamipro.route('/home') 88def home(): 89 name = request.cookies.get('name') 90 if name is None: 91 return redirect(url_for('saisyo')) 92 return render_template('lazupai.html', name=name) 93 94@egamipro.route('/day', methods=["POST"])#番号をcookieから取得し、jikan.htmlに飛ぶ 95def day_post(): 96 bangou = request.cookies.get('bangou') 97 if bangou is None: 98 return redirect(url_for('saisyo')) 99 return render_template('jikan.html',bangou=bangou) 100 101@egamipro.route('/jikan', methods=["POST"])#入力されたクラス番号と一致する列の時間を更新する 102def jikan_post(): 103 # テンプレートから新規登録する商品名と値段を取得 104 105 106 bangou = request.cookies.get('bangou') 107 kaisijikan = request.form["kaisijikan"] 108 kaisihun = request.form["kaisihun"] 109 owarijikan = request.form["owarijikan"] 110 owarihun = request.form["kaisihun"] 111 name = request.cookies.get('name') 112 113 114 # データベースを開く 115 con = get_db() 116 117 118 # 登録処理 119 sql = "UPDATE nemoto SET 開始時間={},開始分={},終了時間={},終了分={} where クラス番号 = '{}'".format(kaisijikan,kaisihun,owarijikan,owarihun,bangou) 120 con.execute(sql) 121 con.commit() 122 123 # 一覧再読み込み 124 cur = con.execute("select * from nemoto where クラス番号= '{}'".format(bangou)) 125 data = cur.fetchall() 126 con.close() 127 128 return render_template('menyu.html', name = name,data=data) 129 130 131@egamipro.route('/kanri', methods=["POST"])#管理者のテーブルを探し、無ければ作成する。 132def kanri_post(): 133 # データベースを開く 134 con = get_db() 135 # テーブル「商品一覧」の有無を確認 136 cur = con.execute("select count(*) from sqlite_master where TYPE='table' AND name='KanrisyaLOGIN'") 137 for row in cur: 138 if row[0] == 0: 139 # テーブル「商品一覧」がなければ作成する 140 cur.execute("CREATE TABLE KanrisyaLOGIN(ID TEXT , パスワード INTEGER)") 141 # レコードを作る 142 cur.execute( 143 """INSERT INTO KanrisyaLOGIN(ID, パスワード) 144 values(10, 123456) 145 """) 146 con.commit() 147 # 商品一覧を読み込み 148 cur = con.execute("select * from KanrisyaLOGIN") 149 data = cur.fetchall() 150 con.close() 151 return render_template('index_K.html', data = data) 152@egamipro.route('/result_K', methods=["POST"])#管理者のログイン 153def result_Kpost(): 154 con = get_db() 155 id = request.form["id"] 156 password = request.form["password"] 157 cur = con.execute("select count(*) from KanrisyaLOGIN where id=? and パスワード=?" ,(id,password)) 158 data = cur.fetchall() 159 if data[0][0] == 0: 160 return render_template('err.html') 161 else: 162 return render_template('kanrimenyu.html',data=data) 163 164@egamipro.route('/setuzoku', methods=["POST"])#ラズパイを照合する 165def setuzoku(): 166 167 # データベースを開く 168 con = get_db() 169 170 # 商品一覧を読み込み 171 cur = con.execute("select ラズパイID,クラス番号,名前,メッセージ from nemoto order by ラズパイID") 172 data = cur.fetchall() 173 con.close() 174 175 return render_template('setuzoku.html', data = data) 176 177@egamipro.route('/logout', methods=["POST"])#cookieを破棄する、ログイン画面へ 178def logout(): 179 return render_template('login.html') 180 181 182if __name__ == '__main__':

HTML

1<!DOCTYPE html> 2<html lang="jp"> 3<head> 4 <meta charset="UTF-8"> 5 <title>殴る蹴る等の暴力は日常です</title> 6</head> 7<body> 8 <h1>今なら引き返せる</h1> 9 <form action='/result'> 10 <p><ログイン></p> 11 <label> 12 クラス番号 13 <input type="text" name="bangou"> 14 </label> 15 <label > 16 名前 17 <input type="text" name="name"> 18 </label> 19 <label> 20 パスワード 21 <input type="text" name="password"> 22 </label> 23 <button type="submit" formmethod="POST">登録</button> 24 </form> 25 <form action ='/kanri'> 26 <button type="submit" formmethod="POST">管理者の方はこちら</button> 27 </form> 28 </form> 29</body> 30</html>

試したこと

lazupai.htmlの場所を変更
最初にlazupai.htmlを置いて開くかどうかの確認など

補足情報(FW/ツールのバージョンなど)

vscode

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sobasenbei

2022/11/09 04:08

入力フォーム→result関数→home関数という流れは正しいのですか
guest

回答1

0

自己解決

vscodeを立ち上げなおすことで直りました

投稿2022/11/09 04:46

nemotonkatu

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問