我尝试了几个不同的烧瓶应用程序,并得到以下错误每次。
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()routes.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 = number2index.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>发布于 2018-08-06 03:16:17
当您的页面第一次加载时,没有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')https://stackoverflow.com/questions/51700053
复制相似问题