从ajax获取张贴的数据到瓶服务器并显示模板

编辑
我认为我的问题不符合重复(对于像我这样的非专业用户而言,这并不明显)。 无论哪种方式,让我澄清我需要什么,以及我目前的解决方案。

  • 用户事件(ctrl v)使用'POST'方法将数据发送到服务器。 我使用ajax的唯一原因是从剪贴板获取粘贴的图像。

  • 在服务器上,flask / python函数读取数据,并最终以render_template('index.html',results = func(request.form))形式显示结果

  • 这当然不会那么棘手。 从下面的评论我想出了一个makedo解决方案。 ajax发布到服务器,python将数据保存到文件中,并将filename返回给ajax。 Ajax中的done函数被修改为重定向到包含文件名的url。

    done(function(filename) {
            window.location.href = "/scan/"+filename;
            });
    

    最后我有一条路线

    @app.route('/scan/<filename>',methods=['POST']) 
    def somefunc(filename):
        #stuff
        return render_template("index.html",results=...)
    

    我不知道这是否是一个很好的方法来做到这一点,甚至是安全的。

    原帖

    在这个简单的例子中,一个脚本侦听一个'粘贴'(ctrl + v)事件,然后将它路由到一个flask / python函数。 但由于某种原因,最后的render_template调用从不执行。

    HTML和JavaScript

    <body>
    Press Ctrl+V (page must be focused)
    <br /><br />
    {%if msg %}
        {{ msg }}
    {% endif %}
    
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script type=text/javascript>
    //Listen for a Ctr+V event
    document.addEventListener('paste', function (e) {send_data(e);},false);
    
    send_data = function (e) {
        var fd = new FormData();
        fd.append('data', "Mytest");
        $.ajax({
                type: 'POST',
                url: '/pastetest',
                data: fd,
                processData: false,
                contentType: false
        }).done(function() {
           console.log('sent to server');
            });
        e.preventDefault();
    };
    </script>
    </body>
    

    瓶/蟒蛇

    @app.route('/')
    def index():
        print("yo")
        return render_template('paste4.html',msg="Waiting")
    
    @app.route('/pastetest',methods=['POST']) 
    def image_upload():
        print("On the server")
        print(request.form)
        return render_template('paste4.html',msg="All Done") #<-- Doesn't execute??
    

    终端上的输出确认一切顺利'POST'。

     * Serving Flask app "pasteapp"
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    yo
    127.0.0.1 - - [06/Nov/2017 21:25:37] "GET / HTTP/1.1" 200 -
    On the server
    ImmutableMultiDict([('data', 'Mytest')])
    127.0.0.1 - - [06/Nov/2017 21:25:42] "POST /pastetest HTTP/1.1" 200 -
    

    但是最后的“全部完成”从不显示在页面上。 我无法理解这里发生了什么。

    链接地址: http://www.djcxy.com/p/71907.html

    上一篇: Getting posted data from ajax to flask server and displaying template

    下一篇: How to upload and display image