This question already has an answer here:
Flask view shows 400 error instead of template with form
(1个答案)
2年前关闭。
我尝试了几种不同的flask应用程序,每次都遇到以下错误。
werkzeug.exceptions.BadRequestKeyError
werkzeug.exceptions.HTTPException.wrap..newcls:400错误
请求:KeyError:'名称'
我不知道为什么。我的安装程序一定有问题,因为在不同的应用程序中会发生相同的事情。我建立了一个非常简单的模型,用最少的代码来演示。如果删除
app.py
route.py
models.py
index.html
(1个答案)
2年前关闭。
我尝试了几种不同的flask应用程序,每次都遇到以下错误。
werkzeug.exceptions.BadRequestKeyError
werkzeug.exceptions.HTTPException.wrap..newcls:400错误
请求:KeyError:'名称'
我不知道为什么。我的安装程序一定有问题,因为在不同的应用程序中会发生相同的事情。我建立了一个非常简单的模型,用最少的代码来演示。如果删除
name
键,则使用number1
键会出现相同的错误。而且我什至找不到任何关于此错误的含义。app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///flow.sqlite3'
db = SQLAlchemy(app)
from routes import *
if __name__ == '__main__':
# db.drop_all()
db.create_all()
app.run()
route.py
from flask import render_template, request
from app import app, db
from models import Info
@app.route('/', methods=['GET', 'POST'])
def index():
data = Info(request.form['name'], request.form['number1'], request.form['number2'])
db.session.add(data)
db.session.commit()
return render_template('index.html', data=data)
models.py
from app import db
class Info(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
number1 = db.Column(db.Integer)
number2 = db.Column(db.Integer)
def __init__(self, name, number1, number2):
self.name = name
self.number1 = number1
self.number2 = number2
index.html
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form id='basic' action="index.html" method="post">
<label for="name">Name:</label>
<input type="text" name="name" placeholder="Name">
<label for="number1">Number 1:</label>
<input type="number" name="number1">
<label for="number2">Number 2:</label>
<input type="number" name="number2">
<button id='btn_submit' type="submit" name="button">Submit</button>
</form>
</body>
</html>
最佳答案
首次加载页面时,没有request.form
词典,这就是为什么会出现键错误的原因。您需要编写一条if语句来检查是否提交了表单或是否第一次加载了页面。
from flask import redirect, url_for
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
data = Info(request.form['name'], request.form['number1'], request.form['number2'])
db.session.add(data)
db.session.commit()
return redirect(url_for('index'))
else:
return render_template('index.html')
09-20 22:38