【问题标题】:Why request.method is not getting invoked?为什么 request.method 没有被调用?
【发布时间】:2019-11-12 11:53:40
【问题描述】:

我有一个只读文本框,它从数据库中预加载值,单击按钮将其值发送到后端的方法,以执行DELETE sql 查询。当我单击调用该方法的按钮但未调用 request.method 条件时,就会出现问题。就是直接到方法的结尾return声明。

@app.route('/home/delete_reminder/<string:id_val>',methods=['GET','POST'])
@is_logged_in
def delete_reminder(id_val):
    if request.method=='POST':
        desc = request.form['description']
        x = desc.split(',')
        cur = mysql.connection.cursor()
        cur.execute('DELETE FROM set_reminder WHERE DATE=%s,SUBJECT=%s,DESCRIPTION=%s',[x[0],x[1],x[2]])
        cur.execute('DELETE FROM recur WHERE RECUR_NEXT=%s',[id_val])
        flash('Reminder Deleted','danger')
        mysql.connection.commit()
        cur.close()
    return redirect(url_for('search_reminder_to_delete'))

这是我的后端代码。

<form method="POST">
        {% for data in value %}
        <div class="form-group">
            <label>Description</label>
            <input type="text" name="description" class="form-control" readonly="true" value="{{data.DATE}},{{data.SUBJECT}},{{data.DESCRIPTION}}">
        </div>
        <a href="/home/delete_reminder/{{data.RECUR_NEXT}}" class="btn btn-warning" name="delete">Delete Reminder</a>
        {% endfor %}
    </form>

这是html部分。

【问题讨论】:

    标签: python mysql sql python-3.x flask


    【解决方案1】:

    您的按钮不是按钮,而是链接。您没有提交表单。

    如果你想这样做,那么你需要让你的表单标签:

    &lt;form method="POST" action="/home/delete_reminder/{{data.RECUR_NEXT}}"&gt;

    并将您的按钮切换为提交表单的真实按钮:

    <div class="button">
      <button type="submit" class="btn btn-warning">Send your message</button>
    </div>
    

    编辑:看到您希望根据循环为表单提供多个可能的路线。

    您可以尝试使用formaction 属性,尽管并非所有浏览器版本都支持它。

    <form method="POST">
    {% for data in value %}
        <div class="form-group">
            <label>Description</label>
            <input type="text" name="description" class="form-control" readonly="true" value="{{data.DATE}},{{data.SUBJECT}},{{data.DESCRIPTION}}">
        </div>
        <div class="button">
            <button formaction="/home/delete_reminder/{{data.RECUR_NEXT}}" class="btn btn-warning" type="submit" class="btn btn-warning">Delete Reminder</button>
        </div>
    {% endfor %}
    

    但是,这仍然会导致传递给请求的 description 字段将整个表单中的每个描述都包含在列表中,或者可能只是最后一个作为单个值(我不太记得行为具有相同名称的多个输入),我认为这不是您所期望的。

    老实说,为循环中的每个链接创建一个单独的表单可能是最简单的:

    {% for data in value %}
    <form method="POST" action="/home/delete_reminder/{{data.RECUR_NEXT}}">
            <div class="form-group">
                <label>Description</label>
                <input type="text" name="description" class="form-control" readonly="true" value="{{data.DATE}},{{data.SUBJECT}},{{data.DESCRIPTION}}">
            </div>
            <div class="button">
                <button class="btn btn-warning" type="submit" class="btn btn-warning">Delete Reminder</button>
            </div>
    </form>
    {% endfor %}
    

    【讨论】:

    • 如果我将网址放在action 中,那么它将如何获得data.RECUR_NEXT,因为data 是循环的一部分?
    猜你喜欢
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    相关资源
    最近更新 更多