首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >烧瓶werkzeug.exceptions.BadRequestKeyError

烧瓶werkzeug.exceptions.BadRequestKeyError
EN

Stack Overflow用户
提问于 2018-08-06 03:07:06
回答 1查看 32.5K关注 0票数 3

我尝试了几个不同的烧瓶应用程序,并得到以下错误每次。

werkzeug.exceptions.BadRequestKeyError werkzeug.exceptions.HTTPException.wrap..newcls: 400坏请求: KeyError:“名称”

我搞不懂为什么。这肯定与我的设置有关,因为相同的事情发生在不同的应用程序中。我用最少的代码建立了一个非常简单的模型来演示。如果删除name键,则与number1键得到相同的错误。我连这个错误的意思都找不到。

app.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
<!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>
EN

回答 1

Stack Overflow用户

发布于 2018-08-06 03:16:17

当您的页面第一次加载时,没有request.form字典,这就是为什么您得到键错误的原因。您需要编写一个if语句,以检查表单是否已提交或页面是否首次加载。

代码语言:javascript
复制
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')
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51700053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档