如何将HTML数据发送到无格式的烧瓶

时间:2019-02-17 13:17:48

标签: python jquery python-3.x flask

我知道您可以使用jquery中的$.ajax()之类的调用轻松地将表单数据发送到flask,但是我需要的是一种使用元素<p>标签将数据发送到flask服务器的方法。

例如: test.html

<p data-rep='testentry' class='qtemp'>Entry00</p>
<p data-rep='testentry01' class='qtemp'>Entry01</p>

index.js

$(document).ready(function(){
    $('.qtemp').on('click',function(){
        var layout = $(this).data('rep');

        $.ajax({
            url: 'workstation',
            type: 'POST',
            data: layout
        });     
    });
});

main.py

@app.route('/workstation',methods=['GET','POST'])
def workstation(data):
    layout = data

    return render_template('station.html',target=layout)

运行此应用程序:

  1. 不呈现模板station.html
  2. 不打印包含已发送数据的layout变量(我添加了一条print语句,但它不起作用,甚至尝试将其写入文件中)

我尝试过的事情:

  1. index.js中,将data: layout替换为data: JSON.stringify(layout),然后在.main.py中,将layout = data替换为layout = request.args.get('data')

不用说,所有这些都不起作用

注意:不能使用html表单

1 个答案:

答案 0 :(得分:1)

您需要修改ajax,以确保从Python路由接收到JSON化的结果。另外,为了存储从ajax调用返回的数据,必须使用flask.request.args通过键名访问值:

index.js中:

$(document).ready(function(){
   $('.qtemp').on('click',function(){
    var layout = $(this).data('rep');
     $.ajax({
      url: "/workstation",
      type: "get",
      data: {layout: layout},
      success: function(response) {
        var new_html = response.html;
      },
     });     
  });
});

main.py中:

@app.route('/workstation')
def workstation():
  layout = flask.request.args.get('layout')
  return flask.jsonify({'html':flask.render_template('station.html',target=layout)})

编辑:您可以将ajax请求中获得的值存储在flask.session中,然后重定向到所需的页面。为此,请创建一条附加路径来保存该值,然后在window.location.replace ajax函数的主体中使用success

index.js中:

$(document).ready(function(){
  $('.qtemp').on('click',function(){
    var layout = $(this).data('rep');
    $.ajax({
      url: "/update_layout",
      type: "get",
      data: {layout: layout},
      success: function(response) {
        window.location.replace('/workstation');
      },
    });     
  });
});

main.py

import string, random

app.secret_key = ''.join(random.choice(string.printable) for _ in range(20))
#secret_key needed for session implementation

@app.route("/update_layout")
def update_layout():
  flask.session['layout'] = flask.request.args.get('layout')
  return flask.jsonify({'success':'True'})

@app.route('/workstation', methods=['GET'])
def workstation():
  return flask.render_template('station.html',target = flask.session['layout'])