簡體   English   中英

如何在Python終端打印javascript數據

[英]How to print javascript data in Python terminal

我有一個 javascript 文件,一個 html 文件和一個 python 文件。 在 Java 腳本 function 中,事件生成了一個數據,我可以在瀏覽器控制台中看到該數據。 我也想在 python 中查看此數據。 我在一個名為 Hype4 的程序中創建了該網站,並自動生成了 javascript 和 html 文件。 我寫了 javascript function 和 python 文件,但是我不能從 js function 發送數據到 python。

Python 文件:

from flask import Flask, render_template, request, jsonify
import json
import pandas as pd



app = Flask(__name__)

@app.route("/")
def index():
    return render_template("cafeproje.html")

@app.route('/receiver', methods = ["POST"])
def receiver():
    data = request.get_json()
    df = pd.read_json(data)
    print(data)
    return jsonify(data)

    
if __name__=="__main__":
    app.run(debug=True)

Html 檔案:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="chrome=1,IE=edge" />
    <title>CafeProje</title>
    <style>
        html {
            height:100%;
        }
        body {
            background-color:#FFF;
            margin:0;
            height:100%;
        }
    </style>
    <!-- copy these lines to your document head: -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <meta name="viewport" content="user-scalable=no, width=320" />

    <!-- end copy -->
  </head>
  <body>
    <!-- copy these lines to your document: -->

    <div id="cafeproje_hype_container" class="HYPE_document" style="margin:auto;position:relative;width:100%;height:100%;overflow:hidden;"></div>
    <script src="static/js/cafeproje_hype_generated_script.js"></script>    

    <!-- end copy -->
    


    <!-- text content for search engines: -->

    <div style="display:none" aria-hidden=true>

        <div>Garson Seçiniz</div>
        <div>0</div>
        <div>Garson İlgili miydi?</div>
        <div> Arga Tek. Hizmetinizde</div>
        <div></div>
        <div>Garson Titiz miydi?</div>
        <div>Garson Hızlı mıydı?</div>
        <div>Evet</div>
        <div>Tuvaleti Kullandınız mı?</div>
        <div>Hayır</div>
        <div>Anketimiz Bu Kadardı Teşekkürler</div>
        <div>Tuvaletler Temiz Miydi?</div>

    </div>

    <!-- end text content: -->

  </body>
</html>

Javascript Function:

function veriGonder (hypeDocument, element, event){
    
    if (sayfaNo == "1") {
    
        var id = idKaydet;
        var sayfa = sayfaNo;
        var garson = garson;
        var oy = "NONE";
        var secenek = "NONE";
        
        datas = [{ id: idKaydet, sayfa: sayfaNo, garson: garson }];     console.log("Sayfa 1 Gönderildi: ");
        console.log(datas);
        
        $.ajax({
            type: "POST",
            url:"/receiver",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ id: idKaydet, sayfa: sayfaNo, garson: garson })
        });
    }
    
    
    else if (sayfaNo == "2") {
    
        var id = idKaydet;
        var sayfa = sayfaNo;
        var garson = "NONE";
        var oy = oyMiktari;
        var secenek = "NONE";
        
        datas = [{ id: idKaydet, sayfa: sayfaNo, oy: oyMiktari }];      console.log("Sayfa 2 Gönderildi: ");
        console.log(datas);
        $.ajax({
            type: "POST",
            url:"/receiver",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ id: idKaydet, sayfa: sayfaNo, oy: oyMiktari  })  
        });
    }
    
    else if (sayfaNo == "3") {
    
        var id = idKaydet;
        var sayfa = sayfaNo;
        var garson = "NONE";
        var oy = oyMiktari;
        var secenek = "NONE";
        
        datas = [{ id: idKaydet, sayfa: sayfaNo, oy: oyMiktari }];      console.log("Sayfa 3 Gönderildi: ");
        console.log(datas);
        $.ajax({
            type: "POST",
            url:"/receiver",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ id: idKaydet, sayfa: sayfaNo, oy: oyMiktari })   
        });
    }
    
    else if (sayfaNo == "4") {
    
        var id = idKaydet;
        var sayfa = sayfaNo;
        var garson = "NONE";
        var oy = oyMiktari;
        var secenek = "NONE";
        
        datas = [{ id: idKaydet, sayfa: sayfaNo, oy: oyMiktari }];      console.log("Sayfa 4 Gönderildi: ");
        console.log(datas);
        $.ajax({
            type: "POST",
            url:"/receiver",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ id: idKaydet, sayfa: sayfaNo, oy: oyMiktari })   
        });
    }
    
    else if (sayfaNo == "5") {
    
        var id = idKaydet;
        var sayfa = sayfaNo;
        var garson = "NONE";
        var oy = "NONE";
        var secenek = secenek;
        
        datas = [{ id: idKaydet, sayfa: sayfaNo, secenek: secenek }];       console.log("Sayfa 5 Gönderildi: ");
        console.log(datas);
        $.ajax({
            type: "POST",
            url:"/receiver",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ id: idKaydet, sayfa: sayfaNo, secenek: secenek })    
        });
    }
    
    else if (sayfaNo == "5m1") {
    
        var id = idKaydet;
        var sayfa = sayfaNo;
        var garson = "NONE";
        var oy = oyMiktari;
        var secenek = "NONE";
        
        datas = [{ id: idKaydet, sayfa: sayfaNo, oy: oyMiktari }];      console.log("Sayfa 5m1 Gönderildi: ");
        console.log(datas);
        $.ajax({
            type: "POST",
            url:"/receiver",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ id: idKaydet, sayfa: sayfaNo, oy: oyMiktari })   
        });
    }       
}   

Hype4 自動生成的 javascript 代碼(分享鏈接,因為它不適合這里): https://www.codepile.net/pile/wA75kWrj

@巴爾德曼

Python:

from flask import Flask, render_template, request, jsonify
import json
import pandas as pd



app = Flask(__name__)

@app.route("/")
def index():
    return render_template("cafeproje.html")

@app.route('/receiver', methods = ["POST"])
def receiver():
    print("we are here")
    data = request.get_json()
    df = pd.read_json(data)
    print(data)
    return jsonify(data)

    
if __name__=="__main__":
    app.run(debug=True)

我沒有更改其他代碼。

Output:

* Serving Flask app "cafeproje" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 250-177-957
127.0.0.1 - - [22/Sep/2020 12:18:26] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [22/Sep/2020 12:18:28] "POST /receiver HTTP/1.1" 500 -
Traceback (most recent call last):
  File "/Users/tunahan/opt/anaconda3/envs/CafeProjesiDeneme/lib/python3.7/site-packages/flask/app.py", line 2464, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Users/tunahan/opt/anaconda3/envs/CafeProjesiDeneme/lib/python3.7/site-packages/flask/app.py", line 2450, in wsgi_app
    response = self.handle_exception(e)
  File "/Users/tunahan/opt/anaconda3/envs/CafeProjesiDeneme/lib/python3.7/site-packages/flask/app.py", line 1867, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/tunahan/opt/anaconda3/envs/CafeProjesiDeneme/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/Users/tunahan/opt/anaconda3/envs/CafeProjesiDeneme/lib/python3.7/site-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/tunahan/opt/anaconda3/envs/CafeProjesiDeneme/lib/python3.7/site-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/tunahan/opt/anaconda3/envs/CafeProjesiDeneme/lib/python3.7/site-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/tunahan/opt/anaconda3/envs/CafeProjesiDeneme/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/Users/tunahan/opt/anaconda3/envs/CafeProjesiDeneme/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/tunahan/opt/anaconda3/envs/CafeProjesiDeneme/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Volumes/GoogleDrive/Ortak Drive'lar/Arga Tek/Tunahan/ProjeCafeDeneme/cafeproje.py", line 17, in receiver
    df = pd.read_json(data)
  File "/Users/tunahan/opt/anaconda3/envs/CafeProjesiDeneme/lib/python3.7/site-packages/pandas/util/_decorators.py", line 214, in wrapper
    return func(*args, **kwargs)
  File "/Users/tunahan/opt/anaconda3/envs/CafeProjesiDeneme/lib/python3.7/site-packages/pandas/io/json/_json.py", line 585, in read_json
    path_or_buf, encoding=encoding, compression=compression
  File "/Users/tunahan/opt/anaconda3/envs/CafeProjesiDeneme/lib/python3.7/site-packages/pandas/io/common.py", line 200, in get_filepath_or_buffer
    raise ValueError(msg)
ValueError: Invalid file path or buffer object type: <class 'dict'>

請閱讀read_json的文檔:

參數 path_or_buf有效的 JSON str ,路徑 object 或類似文件的 object

您沒有向那里傳遞有效的 JSON str 您正在向那里傳遞一本您創建了更高一行的字典:

data = request.get_json() # this returns a dictionary

這就是為什么您收到參數是字典的錯誤的原因:

Invalid file path or buffer object type: <class 'dict'>

刪除行data = request.get_json()並將響應作為json 字符串傳遞給read_json()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM