您现在的位置是:首页 >学无止境 >【Python】flask框架 响应前端ajax请求网站首页学无止境

【Python】flask框架 响应前端ajax请求

ZSYL 2023-06-11 16:00:02
简介【Python】flask框架 响应前端ajax请求

【Python】flask框架 响应前端ajax请求

前端JavaScript代码

// 处理用户输入
chatBtn.click(function () {
    var message = chatInput.val();
    if (message.toString().replaceAll(" ", "").trim() == "") {
        common_ops.alert("请输入内容!")
    } else {
        addUserMessage(message);
        chatBtn.attr('disabled', true) // 消息发送后让提交按钮不可点击
        // 发送信息到后台
        $.ajax({
            url: '{{url_for("KGQA_answer")}}',
            method: 'GET',
            data: {
                "prompt": JSON.stringify(message)
            },
            success: function (res) {
                res = JSON.parse(res);
                // alert(res.content);
                addBotMessage(res.content);
                chatBtn.attr('disabled', false)  // 成功接受消息后让提交按钮再次可以点击
            },
            error: function (jqXHR, textStatus, errorThrown) {
                addBotMessage('<span style="color:red;">' + '出错啦!请稍后再试!' + '</span>');
                chatBtn.attr('disabled', false)
            }
        });
    }
});

后端Python代码

flask接收前端请求并返回JSON串

@app.route('/KGQA_answer', methods=['GET', 'POST'])
def KGQA_answer():
    question = request.args.get('prompt')  # 获取参数
    print(question)
    json_data = {"content": "好的!"}
    return json.dumps(json_data)
    dict = AssignIntension(question)
    classification = getClass(dict)
    if (classification == 'entity'):
        entityName = getEntityName(question)
        json_data = query(str(entityName))
    else:
        print("未知问题")
    return jsonify(json_data)

处理ajax的Post请求

 var id = obj.parentNode.parentNode.id;
    $.post("/delitem/"+id, {}, function(data){
        showData(data);
    },"json");
@app.route('/delitem/<id>', methods=['POST'])
def delitem(id):
    db.delItem(id) #业务代码
    #db.data是python列表对象(元素是字典),返回到浏览器后就是js数组(元素是Josn对象
    return jsonify({"result":db.data})  

注意,处理函数可以return两种格式的数据。一是合法的json格式的字符串。

举例2:

var id = $("#recordid").val();
    var name = $("#recordname").val();
    var msg = $("#recordinfo").val();
    $.post("/additem", {"id":id,"name":name,"msg":msg}, function(data){
        showData(data);
    },"json");

对应的flask代码如下:

@app.route('/additem', methods=['POST'])
def additem():
    db.addItem(request.form.get('id'),request.form.get('name'),request.form.get('msg'))
    return jsonify({"result":db.data})

注意,@app.route 方法中需要指定methods参数为POST

可以看出,在flask中,通过request.form.get 来获取ajax发出post的请求。 get方法还可以带第2个参数缺省值,如果指定的参数名不存在,有缺省值的则返回缺省值,没有的话返回None。注意,如果浏览器不是通过ajax发来的post请求,而是通过form提交的,则用request.form[表单元素名]来获取表单元素中的值。

Reference

https://www.bbsmax.com/A/gVdnvoY1dW/

加油!

感谢!

努力!

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。