Flas中同一路由中不同类型的POST请求

2024-06-24 13:26:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在我的网站上有一个页面,你有多个按钮,发送一个不同的POST请求来修改我数据库的某些部分。在

目前,只执行top if语句。如果我试试下面两个,我获取:浏览器(或代理)发送了此服务器无法理解的请求。在

如果我切换它们,执行的总是top If语句。在

我做错了吗?有没有更好的方法来做这种事?在

@app.route('/', methods=["GET", "POST"])
@login_required
def homepage():
    if request.method == "POST" and request.form['estimatedCost']:
        _projectName = request.form['projectName']
        _estimatedCost = request.form['estimatedCost']
        _amountAllocated = request.form['amountAllocated']
        conn, cursor = connectDB()
        cursor.execute("INSERT INTO `project` (`name`, `estimatedCost`, `amountAllocated`, `pStatus`, `actualCost`, `estimatedDuration`, `actualDuration`, `costDifference`) VALUES ( '" + _projectName + "', '" + _estimatedCost + "', '" + _amountAllocated + "', 'NOT STARTED', 0, 0, 0, NULL)")
        conn.commit()
        conn.close()
        return redirect('/')
    if request.method == "POST" and request.form['delete']:
        _delete = request.form['delete']
        conn, cursor = connectDB()
        cursor.execute("DELETE FROM project WHERE name = '" + _delete + "'")
        conn.commit()
        conn.close()
        return redirect('/')
    if request.method == "POST" and request.form['pid']:
        _pid = request.form['pid']
        _status = request.form['status']
        conn, cursor = connectDB()
        cursor.execute("UPDATE project SET pStatus = '" + _status + "' WHERE name = '" + _pid + "'")
        conn.commit()
        conn.close()
        return redirect('/')
    conn, cursor = connectDB()
    cursor.execute("SELECT * FROM project")
    projects = cursor.fetchall()
    conn.close()
    return render_template("dashboard.html", projectDic = projects)

Tags: formprojectcloseexecutereturnifrequestconn
1条回答
网友
1楼 · 发布于 2024-06-24 13:26:34

我设法找到了解决问题的办法。在

因为request.form['key']在不存在的情况下导致了一个错误,而不是变成了False,它使页面崩溃。在

相反,我使用"key" in request.form检查表单中是否填写了该输入。在

以下是正确的代码:

@app.route('/', methods=["GET", "POST"])
@login_required
def homepage():
    if request.method == "POST" and "estimatedCost" in request.form:
        _projectName = request.form['projectName']
        _estimatedCost = request.form['estimatedCost']
        _amountAllocated = request.form['amountAllocated']
        conn, cursor = connectDB()
        cursor.execute("INSERT INTO `project` (`name`, `estimatedCost`, `amountAllocated`, `pStatus`, `actualCost`, `estimatedDuration`, `actualDuration`, `costDifference`) VALUES ( '" + _projectName + "', '" + _estimatedCost + "', '" + _amountAllocated + "', 'NOT STARTED', 0, 0, 0, NULL)")
        conn.commit()
        conn.close()
        return redirect('/')
    if request.method == "POST" and "delete" in request.form:
        _delete = request.form['delete']
        conn, cursor = connectDB()
        cursor.execute("DELETE FROM project WHERE name = '" + _delete + "'")
        conn.commit()
        conn.close()
        return redirect('/')
    if request.method == "POST" and "pid" in request.form:
        _pid = request.form['pid']
        _status = request.form['status']
        conn, cursor = connectDB()
        cursor.execute("UPDATE project SET pStatus = '" + _status + "' WHERE name = '" + _pid + "'")
        conn.commit()
        conn.close()
        return redirect('/')
    conn, cursor = connectDB()
    cursor.execute("SELECT * FROM project")
    projects = cursor.fetchall()
    conn.close()
    return render_template("dashboard.html", projectDic = projects)

相关问题 更多 >