【问题标题】: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 操作。有两个输入字段。

  1. 主题和 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”,它在您运行的代码中是否一致?

标签: python sqlite flask flask-sqlalchemy


【解决方案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 的帮助。

    【讨论】:

    • 哦,太好了。抱歉,我删除了此线程,但看起来您的问题确实是字段名称不匹配,您可以不使用条件。很高兴它成功了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2021-09-30
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    相关资源
    最近更新 更多