jpa*_*nin 3 python werkzeug flask
我尝试了几种不同的烧瓶应用程序,但每次都会出现以下错误。
werkzeug.exceptions.BadRequestKeyError
werkzeug.exceptions.HTTPException.wrap..newcls:400错误请求:KeyError:'名称'
我不明白为什么。这一定与我的设置有关,因为在不同的应用程序中发生了同样的事情。我建立了一个非常简单的模型,用最少的代码进行演示。如果我删除name密钥,我会收到与该密钥相同的错误number1。我找不到任何关于这个错误的含义的信息。
应用程序.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()
Run Code Online (Sandbox Code Playgroud)
路线.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)
Run Code Online (Sandbox Code Playgroud)
模型.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
Run Code Online (Sandbox Code Playgroud)
索引.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>
Run Code Online (Sandbox Code Playgroud)
When your page is first loaded, there is no request.form dictionary, which is why you get the key error. You need to write an if statement to check if the form was submitted or if the page is being loaded the first time.
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')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35459 次 |
| 最近记录: |