thressCrypt:如何使用Python / Flask发送AJAX POST请求以启动服务器端作业



我正处于创建烧瓶应用程序的早期阶段,并在@miguel Grinberg创建长期运行的任务中遇到了一个很好的例子。目前,我想减少我必须在项目中学习/使用的JavaScript的数量,并引起了我的注意。

但是,我在文档中有些丢失,试图弄清楚如何完成启用任务的发布请求。这是JavaScript中的代码:

    // send ajax POST request to start background job
        $.ajax({
            type: 'POST',
            url: '/longtask',
            success: function(data, status, request) {
                status_url = request.getResponseHeader('Location');
                update_progress(status_url, nanobar, div[0]);
            },
            error: function() {
                alert('Unexpected error');
            }
        });

我将如何使用TransCrypt在Python中完成此操作?

继续如下:

$不是Python中的有效标识符,因此请使用__pragma__ ('alias', 'jq', '$')如下。

除了lambda's,python不知道匿名功能,因此请使用普通函数作为回调。在下面的示例中,使用了本地功能。

小心地将报价围绕字段名称放置,例如"成功"而不是成功,因为这是python的惯例。

使用TransCrypt的AJAX的示例:

__pragma__ ('alias', 'jq', '$')
# For use by eval'ed turtle applet
import turtle
import random
import math
def clear ():
    editor.setValue ('')
    turtle.reset ()
    run ()
def run ():
    def success (result):
        turtle.reset ()
        eval (result)
    def fail (a, b, c):
        print ('Run error:', a, b, c)
    # N.B. The request has to be explicitly encoded, but the response is already implicitly decoded
    jq.ajax ({
        'url':'http://www.transcrypt.org/compilemodule',
        'type': 'POST',
        'data': JSON.stringify (editor.getValue ()),
        'dataType': 'json',
        'contentType': 'application/json',
        'success': success,
        'fail': fail
    })
def mail ():
    def success (result):
        print (result)
    def fail (a, b, c):
        print ('Run error:', a, b, c)
    jq.ajax ({
        'url':'http://www.transcrypt.org/sendmail',
        'type': 'POST',
        'data': JSON.stringify ([document.getElementById ('mail_address') .value, editor.getValue ()]),
        'dataType': 'json',
        'contentType': 'application/json',
        'success': success,
        'fail': fail
    })
def selectExample ():
    def success (result):
        editor.setValue (result [0])
        turtle.reset ()     # Using old paths
        window.terminate = True
        eval (result [1])   # Using new paths (so cannot clear old result)
    def fail (a, b, c):
        print ('Select example error:', a, b, c)
    selector = document.getElementById ('select_example')
    jq.ajax ({
        'url':'http://www.transcrypt.org/selectexample',
        'type': 'POST',
        'data': JSON.stringify (selector.options [selector.selectedIndex] .value),
        'dataType': 'json',
        'contentType': 'application/json',
        'success': success,
        'fail': fail
    })
selectExample ()

您可以在烧瓶中使用邮政方法。

from flask import Flask
app = Flask(__name__)
@app.route('/index/', methods=['POST'])
def sample_function():
    # do your server task here
    return "BROWSER Update/response"
app.run("127.0.0.1", "8000")

在JavaScript中,用AJAX致电http://127.0.0.1:8000/index/

相关内容

  • 没有找到相关文章

最新更新