Flask - Postgres 400 Bad Request

问题描述 投票:-1回答:1

我对Flask和Postgres有一个问题。下面我将链接我的app.py,models.py和views.py。每当我尝试定义新用户并将其添加到数据库时,就会出现400错误。我检查了我的服务器在postgres中运行,并且我已连接到数据库。我的所有表都已正确创建,并且我能够在python shell中传递新用户。有什么想法吗?

app.朋友

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://user:pass@localhost/mydb'

db = SQLAlchemy(app)

from views import *
from models import *

if __name__=='__main__':
    db.create_all()
    app.run(debug=True)

views.朋友

from app import app
from app import db
from models import User
from flask import Flask, render_template, redirect, url_for, request

@app.route('/')
def home():
    #this will look different for logged in and logged out users
    return render_template('home.html')


@app.route('/about')
def about():
    #notes
    return render_template('about.html')

@app.route('/contact')
def contact():
    #notes
    return render_template('contact.html')

@app.route('/blog')
def blog():
    #notes
    return render_template('blog.html')

@app.route('/podcast')
def podcast():
    #notes
    return render_template('podcast.html')

@app.route('/shop')
def shop():
    #notes
    return render_template('shop.html')

@app.route('/add_user', methods=['GET', 'POST'])
def add_user():
    user = User(request.form['username'], request.form['email'])
    db.session.add(user)
    db.session.commit()
    return render_template('add_user.html')

models.朋友

from app import db
from flask_sqlalchemy import SQLAlchemy

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    def __repr__(self):
        return '<User %r>' % self.username

add_user.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Add User</title>
  </head>
  <body>

    <form action="/add_user" method="post">
      <label>username:</label>
      <input type="text" id="username" name="username">
      <label>email:</label>
      <input type="text" id="email" name="email">
      <input type="submit">
    </form>

  </body>
</html>
python postgresql flask flask-sqlalchemy
1个回答
0
投票

在view.py而不是

def add_user():
   user = User(request.form['username'], request.form['email'])
   db.session.add(user)
   db.session.commit()
   return render_template('add_user.html')

试试这段代码

def add_user():
   if request.method == 'POST':
     user = User(request.form['username'], request.form['email'])
     db.session.add(user)
     db.session.commit()
return render_template('add_user.html')

http://flask.pocoo.org/docs/0.12/quickstart/#the-request-object

如果你将get请求发送到/ add_user,烧瓶看不到表单变量用户名和密码,request.form只能从post发送并放入requsest。

从文档:“如果表单属性中不存在键会发生什么?在这种情况下会引发一个特殊的KeyError。您可以像标准KeyError一样捕获它,但如果您不这样做,则会出现HTTP 400 Bad Request错误页面而是显示出来。所以在很多情况下你不必处理这个问题。“

© www.soinside.com 2019 - 2024. All rights reserved.