我有 Flask 和 Postgres 的问题。下面我将链接我的 app.py、models.py 和 views.py。每当我尝试定义新用户并将其添加到数据库时,就会出现 400 错误。我检查了我的服务器是否在 postgres 中运行并且我已连接到数据库。我的所有表都已正确创建,并且我能够在 python shell 中传递新用户。有什么想法吗?
应用程序
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)
视图.py
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')
模型.py
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>
在 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
如果你向 /add_user 发送 get 请求,flask 看不到表单变量用户名和密码,request.form 只能从 post 和 put requsest 中工作。
来自文档:“如果表单属性中不存在密钥会发生什么?在这种情况下,会引发特殊的 KeyError。您可以像标准 KeyError 一样捕获它,但如果不这样做,则会出现 HTTP 400 Bad Request 错误页面而是显示。因此,在许多情况下,您不必处理该问题。”
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句