在Flask中处理Ajax请求

4

我一直在学习Flask,在其中创建了两个项目,这是我的第三个项目。我总是卡在这一点上。当页面上发生某个事件时,比如点击按钮,我想让服务器端代码运行。

在链接的图片中,我希望当点击“删除”按钮时,该条记录被删除。由于我将数据存放在MySQL服务器上,所以我也希望它从MySQL服务器中被删除。

我已经创建了一个路由/delete_student,它用于处理删除学生的操作。但问题是它总是重新加载页面,并且还会切换到不同的URL。我不希望发生任何这些情况。我该怎么办?我应该使用Ajax吗?如果是,请告诉我怎么做。

HTML

{% for i in data %}
            <tr>
                <td>{{i['roll_no']}}</td>
                <td>{{i['name']}}</td>
                <td>{{i['username']}}</td>
                <td>{{i['password']}}</td>
                <td><a href="#">Edit</a></td>
                <td><a href="{{url_for('delete_student')}}">Delete</a></td>
            </tr>
{% endfor %}

Flask

@app.route('/delete_student')
@is_logged_in
def delete_student():
if session['username']=='nitti':
    cur = mysql.connection.cursor()
    #pop the row from the table?
    #how to identify the row being deleted?
    return render_template(url_for('student_summary'))
1个回答

14

你应该使用JavaScript来访问路由。

请查看使用jQuery的AJAX:

http://flask.pocoo.org/docs/0.12/patterns/jquery/

例如,如果您有一个按钮上面写着“删除学生”:

@app.route("/_delete_student")
def delete_student():
    student_id = request.form.get("student_id")
    cur = mysql.connection.cursor()
    cur.execute("DELETE FROM students WHERE student_id = %s", (student_id,)
    conn.commit()
    return jsonify(status="success")

JavaScript(简称JS):

$("#delete_student").click(function(){
    $.ajax({
      type: 'POST',
      url: "/_delete_student",
      data: {student_id: 1},
      dataType: "text",
      success: function(data){
                 alert("Deleted Student ID "+ student_id.toString());
               }
    });
});

@SujeetAgrahari 如果您对此满意,可以接受答案吗?谢谢! :) - Seth Killian
2
出现了一个错误,它返回了“None”,原因是我发送了一个POST请求,在这种情况下,request.args将是一个空对象。 - sujeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接