我是Flask的新手,我正在尝试删除用户。 我已经可以创建一个用户,它说缺少1个参数:
add_user.html
<form method="POST" action="/del_user">
<label> ID: </label>
<input id="id" name ="id" type="text" />
<input type="submit" value="Delete"/>
</form>
app.py
from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
#Set the application in debug mode so that the server is reloaded on any code change & helps debug
app.config['DEBUG'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:********@localhost/projetofinal'
db = SQLAlchemy(app)
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
@app.route('/')
def index():
return render_template('add_user.html')
@app.route('/post_user', methods=['POST'])
def post_user():
user = User(request.form['username'], request.form['email'])
db.session.add(user) #add object
db.session.commit() #save
return redirect(url_for('index'))
@app.route('/del_user', methods=['POST'])
def del_user():
user = User(request.form['id']) #ERROR LINE
user1 = db.session.query(User).filter(User.id==user.id).first()
db.session.delete(user1)
db.session.commit()
return redirect(url_for('index'))
if __name__=="__main__":
app.run()
TypeError: init ()缺少1个必需的位置参数:'email'
答案 0 :(得分:0)
只需从表单中获取id,将其转换为整数并查询数据库。
@app.route('/del_user', methods=['POST'])
def del_user():
user = int(request.form['id'])
user1 = db.session.query(User).filter(User.id==user.id).first()
db.session.delete(user1)
db.session.commit()
return redirect(url_for('index'))
另外检查您的数据库查询是否返回用户对象,以确保您不会尝试删除不存在的用户并获得其他错误
if user1:
db.session.delete(user1)
else:
flash('the record requested was not found')
return redirect(url_for('index'))
了解如何使用flash here优雅地显示错误消息
最后,除了使用文本输入删除之外,您可以使用选择使用现有用户的值,以便值为用户ID,选项文本是用户名,以确保尝试删除仅使用现有用户ID