2016-09-02 8 views
0

Also habe ich dieses einfache Python-Skript, das auf Flask ausgeführt wird, dem ich Variablen mit einer Ajax jQuery-Anfrage übergeben möchte. Ich vermisse etwas offensichtlich, aber ich kann es nicht richtig funktionieren.Ausführen eines Python-Skripts innerhalb von Flask

@app.route('/test', methods=['GET', 'POST']) 
def test(): 
    my_int1 = request.args.get('a') 
    my_int2 = request.args.get('b') 
    my_list = [my_int1, my_int2] 
    with open('my_csv.csv', 'wb') as myfile: 
     wr = csv.writer(myfile, quoting=csv.QUOTE_ALL) 
     wr.writerow(my_list) 
    return '' #does one have to have an return even tho it is just a script? 

Also, oben wird gut funktionieren, wenn nur Parameter an das URL-Feld übergeben: http://127.0.0.1:5000/test?a=10&b=25 jedoch wird versucht, dies in der Chromkonsole liefert keine Ausgabe überhaupt:

$.ajax({ 
    method: "POST", 
    url: "127.0.0.1:5000/test", 
    data: {a: 10, b: 25}, 
    dataType: "script" 
}); 

Was ich fehle und warum funktioniert die obige jquery ajax Anfrage nicht? $.ajax is not a function(…)

+0

Ich denke, es gibt ein Problem mit dem Jquery Verweise in dieser HTML-Datei. – ramesh

+0

Überprüfen Sie die Antwort in einem Browser. Vielleicht fehlt ein Header, wie die Zugriffskontrolle erlauben – Fabiano

Antwort

1

Bitte versuchen Sie mit dem folgenden Code und lassen Sie mich wissen, ob das, was Sie suchen:

from flask import Flask, request 
import csv 

app = Flask(__name__) 


@app.route('/test', methods=['GET', 'POST']) 
def test(): 
    if request.is_xhr: 
     a = request.json['a'] 
     b = request.json['b'] 
    else: 
     a = request.args.get('a') 
     b = request.args.get('b') 
    my_list = [a, b] 
    with open('my_csv.csv', 'wb') as myfile: 
     wr = csv.writer(myfile, quoting=csv.QUOTE_ALL) 
     wr.writerow(my_list) 
    return ''' 
<html> 
    <head> 
    <title>This is just a testing template!</title> 
    </head> 
    <body> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
    </body> 
</html> 
''' 


if __name__ == "__main__": 
    app.run(host='0.0.0.0', debug=True) 

Um von Ihrem Chrome-Konsole zu testen, müssen Sie zunächst http://127.0.0.1:5000/test gehen (danach wird jQuery in Ihrem Browser zur Verfügung steht), dann führen Sie den folgenden Code ein:

$.ajax({ 
    url: "http://127.0.0.1:5000/test", 
    method: "POST", 
    headers: {'Content-Type':'application/json'}, 
    data: JSON.stringify({a: 10, b: 25}), 
    success: function(data){console.log('result: ' + data);} 
}); 

Wenn Sie ein Cross-Origin-Problem haben, füge auch der folgende Code in Ihre app.py Datei:

@app.after_request 
def after_request(response): 
    response.headers.add('Access-Control-Allow-Origin', '*') 
    response.headers.add('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept') 
    response.headers.add('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, OPTIONS') 
    return response 
+0

darf ich Sie fragen, was passiert, wenn ich eine Website und eine Flask-App nur als Webserver ausgeführt habe. Die Website und der Webserver stehen nicht in derselben Domain/IP. Ist es möglich, die flaschen app von dieser Website dann zu feuern? und wie? –

+0

Meinst du, du hast eine statische Website (nur mit JavaScript, HTML, etc) und willst du damit eine Flask API konsumieren? – ettanany

+0

Ja, aber im Moment ist es keine erholsame API. Ist es möglich, ohne meine App zu einer Art erholsamer API zu machen? vielleicht ist es ein Thema. –

1

Bitte beachten Sie http://flask.pocoo.org/docs/0.11/api/#flask.Request

request.args : If you want the parameters in the URL 
request.form : If you want the information in the body (as sent by a html POST form) 
request.values : If you want both 

dieses Versuchen

@app.route('/test', methods=['GET', 'POST']) 
def test(): 
    my_int1 = request.values.get('a') 
    my_int2 = request.values.get('b') 
0

Es scheint Ihre jQuery Bezug auf die HTML-Seite wird dies im <head> here </head> Abschnitt nicht geladen oder nicht korrekt ist, fügen Sie bitte Ihre HTML-Seite.

<script src="https://code.jquery.com/jquery-3.1.0.js"></script> 
Verwandte Themen