2017-04-19 2 views
1

Flask 응용 프로그램을 만드는 초기 단계에 있으며 @Miguel Grinberg의 훌륭한 예제를 통해 장기 실행 작업을 작성했습니다 . 현재 프로젝트에서 배우고 사용해야하는 JavaScript의 양을 줄이기 위해 Transcrypt가 내 눈을 사로 잡았습니다.Transcrypt : Python/Flask를 사용하여 서버 측 작업을 시작하는 ajax POST 요청을 보내는 방법

그러나 설명서에서 작업을 실행하기 위해 POST 요청을 수행하는 방법을 파악하려고하는데 약간 분실되어 있습니다. 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를 사용하여 어떻게 이것을 수행합니까?

+0

당신이 자바 스크립트에서 아약스를 사용하여 파이썬 플라스크 서비스에 POST 요청을 보내시겠습니까? – abhinav

+0

@abhinav 예, 클라이언트가 브라우저에서 작업을 트리거 할 수있게하려면 브라우저에서 파이썬 코드를 실행하고 완료되면 브라우저를 상태로 업데이트하십시오. JavaScript를 사용하기보다는 (이제는 배워야 할 것입니다.) Transcrypt를 사용하여 이것을 수행하기를 희망했습니다. – Tamer

답변

3

진행 :

$ 그래서 다음과 같이 __pragma__ ('alias', 'jq', '$')을 사용하여 파이썬에서 유효한 식별자가 아닙니다.

람다 이외에도 파이썬은 익명 함수를 알지 못하므로 일반 함수를 대신 콜백으로 사용하십시오. 아래 예제에서는 로컬 함수가 사용되었습니다.

필드 이름을 따옴표로 묶으십시오. 이것이 성공이 아니라 '성공'입니다. 왜냐하면 이것이 파이썬 협약이기 때문입니다. 번역하기를 사용하여 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() 
1

플라스크에서 게시 방법을 사용할 수 있습니다. 자바 스크립트에서

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") 

, AJAX와 http://127.0.0.1:8000/index/를 호출합니다. 다음과 같이

+0

응답 해 주셔서 감사합니다. 내 문제는 플라스크 부분이 아니라 그 부분이 쉽습니다. 내 문제는 프로젝트가 확장되고 자바 스크립트가 복잡해지면서 진도가 급격히 올라가는 것입니다. 필자는 그 분야에 대한 지식이 매우 부족하여 Transcrypt를 사용하여 JavaScript로 컴파일 된 파이썬 코드를 작성하기를 희망했습니다. – Tamer