What I want to do.
I want to make an web app using Flask/Python3. What the web page shows the some words which is sent from this page(=form). In addition to this feature, when no words is sent the page only shows form.
Environment
- Windows11 64bit
- Python v3.10.10 64bit
- Flask v2.2.3
Code
import os
from flask import Flask,request,render_template,url_for
app = Flask(__name__)
@app.route("/",methods=["POST","GET"])
def index():
if request.form["test"] is None:
res = "None"
else:
res = request.form["test"]
BASE_HTML="""
<!DOCTYPE html>
<html lang='ja'>
<head>
<meta charset='utf-8'>
<title>DEMO</title>
</head>
<body>
<form action="{{ url_for("index") }}" method="POST">
<input type='text' value='"""+res+"""'>
<input type='submit' value="SEND">
</form>
</body>
</html>
"""
os.chdir("c:\\users\\username\\documents\\templates")
with open("test.html",mode="w",encoding="utf-8") as f:
f.write(BASE_HTML)
return render_template("test.html")
if __name__ == '__main__':
app.run(debug=True)
How the error happended
File "C:\Users\username\Documents\app.py", in index
if request.form["test"] is None:
File "C:\py64-31010\lib\site-packages\werkzeug\datastructures.py", in __getitem__
raise exceptions.BadRequestKeyError(key)
werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
KeyError: 'test'
How to make the code compatible with/without the data sent from form ?
I understand this error happens because there is no form data labeled 'test' but I don't want to prepare another page for without data sent from form. So how should I made code for that ?