如果request.form中的request.method =='POST'和'sub':在flask中不起作用:如果条件没有执行
Posted
技术标签:
【中文标题】如果request.form中的request.method ==\'POST\'和\'sub\':在flask中不起作用:如果条件没有执行【英文标题】:if request.method == 'POST' and 'sub' in request.form: is not working in flask: if condition is not executing如果request.form中的request.method =='POST'和'sub':在flask中不起作用:如果条件没有执行 【发布时间】:2021-12-19 05:53:06 【问题描述】:我正在使用烧瓶和 sqlalchemy 进行 CRUD 操作。有两个输入字段。
-
主题和 2) 描述和添加按钮。用户输入值并将其添加到数据库(sqlite3)。幸运的是,这是有效的。甚至删除也有效。
但更新行不起作用。
我正在附上我的 Flask 代码。
@app.route('/update/<id>/', methods = ['GET','POST'])
def update(id):
subj = ''
descr = ''
print("outside the if condition")
if request.method == 'POST' and 'subb' and 'dess' in request.form:
print("inside the if condition")
subj = request.form.get('sub')
print(subj)
descr = request.form.get('desc')
entry = Crud(subject = subj, description = descr)
db.session.add(entry)
db.session.commit()
searchThisId = Crud.query.get(id)
return render_template("update.html",searchThisId = searchThisId)
HTML
% extends 'base.html' %
% block title % Update the details % endblock %
% block contents %
<div>
<form method = 'POST', action = '/'>
<input type = "text" name = "subb" value = searchThisId.subject ><br>
<input type = "text" name = "dess" value = searchThisId.description ><br>
<input type = "submit" value = "UPDATE">
</form>
</div>
% endblock %
【问题讨论】:
我认为你的问题在这里:如果 request.method == 'POST' and 'subb' and 'dess' in request.form: 你正在尝试测试“if request.方法是 post,“dess”和“subb”都是名为 request.form 的字典中的键,对吗?那不是该声明所写的那样。 dess & subb 来自 HTML 表单 ``` ``` 检查输入标签内的“名称”@MattBlaha 对,但是烧瓶将它们作为字典呈现在 request.form 中?你可以调用 request.form.keys() 吗?我很确定我下面的答案会奏效。 @MattBlaha 尝试了您的代码。但它仍然没有进入“if 条件”。 这正是您正在运行的代码吗?我注意到一件事可能会给您带来其他问题:有时您将“描述”称为“desc”而其他人称为“dess”,它在您运行的代码中是否一致? 【参考方案1】:我没有 Flask 设置,但我认为您的问题在这里:
if request.method == 'POST' and 'subb' and 'dess' in request.form:
这个语句是说“如果 request.method 是 POST,并且 'subb' 是真的,并且 'dess' 是 request.form 的一个元素(我相信这是一本字典——所以最后一部分总是返回 false。)
request.form 是一个字典,您想检查 'subb' 和 'dess' 是否都是该字典中的键?
这应该可行:
if request.method == 'POST' and all(elem in request.form.keys() for elem in ['subb','dess'):
【讨论】:
【参考方案2】:我修改了这样的代码,并且工作正常。
@app.route('/update/<id>/', methods = ['POST','GET'])
def update(id):
searchThisId = Crud.query.get(id)
if request.method == 'POST':
searchThisId.subject = request.form['subb']
searchThisId.description = request.form['dess']
db.session.commit()
return redirect(url_for('Index'))
else:
return render_template("update.html",searchThisId = searchThisId)
HTML
<form method = 'POST', action = "/update/ searchThisId.id /">
<input type = "text" name = "subb" value = searchThisId.subject ><br>
<input type = "text" name = "dess" value = searchThisId.description ><br>
<input type = "submit" value = "UPDATE">
</form>
感谢@MattBlaha 的帮助。
【讨论】:
哦,太好了。抱歉,我删除了此线程,但看起来您的问题确实是字段名称不匹配,您可以不使用条件。很高兴它成功了。以上是关于如果request.form中的request.method =='POST'和'sub':在flask中不起作用:如果条件没有执行的主要内容,如果未能解决你的问题,请参考以下文章