【问题标题】:How to GET data in Flask from AJAX post如何从 AJAX 帖子中获取 Flask 中的数据
【发布时间】:2016-10-04 12:34:47
【问题描述】:

我想从变量“clicked”中检索数据,以便在 Flask 的 SQL 查询中使用它。

jQuery

$(document).ready(function(){
  var clicked;
  $(".favorite").click(function(){
    clicked = $(this).attr("name");
    $.ajax({
      type : 'POST',
      url : "{{url_for('test')}}",
      data : clicked
    });
  });
});

烧瓶/Python

@app.route('/test/', methods=['GET','POST'])
def test():
    return render_template('test.html')

【问题讨论】:

    标签: jquery python ajax flask


    【解决方案1】:

    您可以像这样在 ajax 请求中编写有效负载:

    $(document).ready(function(){
    var clicked;
    $(".favorite").click(function(){
    clicked = $(this).attr("name");
    $.ajax({
      type : 'POST',
      url : "{{url_for('test')}}",
      contentType: 'application/json;charset=UTF-8',
      data : {'data':clicked}
    });
     });
    });
    

    在您的烧瓶端点中,您可以按如下方式提取值:

    @app.route('/test/', methods=['GET','POST'])
    def test():
         clicked=None
         if request.method == "POST":
              clicked=request.json['data']
         return render_template('test.html')
    

    【讨论】:

    • 变量“request”从何而来?
    • @AdailsonDeCastro,你必须从烧瓶from flask import request 导入它
    • 我见过的第一个完整答案。我不敢相信烧瓶人没有完整的示例,包括第 1 步 HTML/选择表单、第 2 步 Ajax 表单、第 3 步 jinja2 重新定义变量。它确实很强大,但记录得很差。再见,再见... php!
    • 对我来说,我必须调用 JSON.stringify() javascript 中的数据
    • 我必须使用GET,而不是POST,然后它对我来说效果很好......赞成,因为它仍然是我找到的最完整的答案
    【解决方案2】:

    在您的烧瓶应用程序端点,您可以定义检索 GET/POST 数据的方法,如下所示:

    from flask_restful import reqparse
    
    def parse_arg_from_requests(arg, **kwargs):
        parse = reqparse.RequestParser()
        parse.add_argument(arg, **kwargs)
        args = parse.parse_args()
        return args[arg]
    
    @app.route('/test/', methods=['GET','POST'])
    def test():
          clicked = parse_arg_from_requests('data')
          return render_template('test.html' , clicked=clicked)
    

    【讨论】:

      【解决方案3】:

      我使用了最佳答案,但我发现了一个错误的请求错误。我解决这个错误如下:

      1- 从 ajax 请求中删除这一行:

      contentType: 'application/json;charset=UTF-8',
      

      2- 通过 request.form 而不是 request.json 访问数据。

      Javascript 部分将类似于:

      $(document).ready(function(){
      var clicked;
      $(".favorite").click(function(){
      clicked = $(this).attr("name");
      $.ajax({
        type : 'POST',
        url : "{{url_for('test')}}",
        data : {'data':clicked}
      });
       });
      });
      

      烧瓶部分:

      @app.route('/test/', methods=['GET','POST'])
      def test():
            clicked=None
            if request.method == "POST":
                clicked=request.form['data']
           return render_template('test.html')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-25
        • 2018-03-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多