如果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中不起作用:如果条件没有执行的主要内容,如果未能解决你的问题,请参考以下文章

asp中request.form用法

flask-03 request对象

request.form()和request()的区别?

request.form()和request()的区别?

Request.Params 和 Request.Form 啥时候不同?

小5聊C#基础之Ajax的getpost与Request.Form的判断