为什么request.method没有被调用?

时间:2019-11-12 11:53:40

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

我有一个只读文本框,该文本框从数据库中预加载了值,单击该按钮后,会将其值发送到后端中存在的方法,以执行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部分。

1 个答案:

答案 0 :(得分:-1)

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

如果要这样做,则需要将其设置为表单标签:

<form method="POST" action="/home/delete_reminder/{{data.RECUR_NEXT}}">

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

<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 %}