前提・実現したいこと
htmlで作った配列データをpythonで確認したいのですが、うまくデータがとれません。
いまhtml内で作った配列データをボタンを押したら、ajaxを使ってPOSTでpythonに送ろうとしています。
python側は受け取った配列を関数の引数にしていますが、
TypeError: 'builtin_function_or_method' object is not subscriptable
toiuエラーが出ています。たぶん配列をおくったはずが、送れていない?
そこでpythonに送らているデータを見ようと思い下のようなコードにしていますが、
/predict/のほうにとんでも、白紙のページしかありません。
html側の問題であると考えていますが、いろいろネット情報を探ってコードを書き換えても、解決しなかったため質問します。
webでユーザが作った配列データをpythonに送りその情報で判別する機械学習アプリを作っています。
参考動画
書いた文字を機械学習的に判別するシステムをもとにしています。
発生している問題・エラーメッセージ
\my_csv.py", line 69, in check_genre writer.writerows[(arr)] TypeError: 'builtin_function_or_method' object is not subscriptable
該当のソースコード
html
1#一部です 2<script type="text/javascript" src="../static/jquery-3.3.1.min1.js"></script> 3<script type="text/javascript"> 4qButton.onclick = () =>{ 5 console.table(arr); 6 var $SCRIPT_ROOT = {{ request.script_root|tojson|safe }}; 7 $.ajax({ 8 type: "POST", 9 url: $SCRIPT_ROOT + "/predict/", 10 data: arr, 11 traditional: true, 12 }); 13} 14</script>
python
1import json 2from flask import request 3from flask import Flask, render_template 4#予測するpyプログラム 5import my_csv 6 7import pandas as pd 8import numpy as np 9import serial 10import datetime 11import csv 12import time 13import matplotlib.pyplot as plt 14import random 15#scientific computing library for saving, reading, and resizing images 16from scipy.misc import imsave, imread, imresize 17 18#for matrix math 19import numpy as np 20#for regular expressions, saves time dealing with string data 21import re 22 23#system level operations (like loading files) 24import sys 25#initalize our flask app 26app = Flask(__name__) 27@app.route('/') 28def index(): 29 with open("index.html", "rb") as f: 30 return render_template('index.html') 31 32@app.route('/predict/',methods=['GET','POST']) 33def predict(): 34 csvdata = request.data 35 #request.dataが配列ならlabel,とpercentを返す。 36 #label,percent = my_csv.check_genre(csvdata) 37 #return label,percent 38 return csvdata
試したこと
元のソース
imgData = request.get_data()を
csvdata = request.dataと変えたり、
↓元のhtmlを変えていますが、何が悪いのかわかりません。
$(".myButton").click(function(){
var $SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
var canvasObj = document.getElementById("canvas");
var img = canvasObj.toDataURL();
$.ajax({
type: "POST",
url: $SCRIPT_ROOT + "/predict/",
data: img,
success: function(data){
$('#result').text(' Predicted Output: '+data);
}
ほぼ確実なのがHTMで作成した配列データを送れていないということです。
console.table(arr);での出力がこのような感じです。
________________________________________________11/23
html側を変えずに
pythonを変えてみると、データらしいものは届いていますが、undefinedになっています。
html
1console.table(arr); 2 var $SCRIPT_ROOT = {{ request.script_root|tojson|safe }}; 3 $.ajax({ 4 type: "POST", 5 url: $SCRIPT_ROOT + "/predict/", 6 data: arr, 7 traditional: true, 8 }); 9
python
1@app.route('/predict/',methods=['GET','POST']) 2def predict(): 3 print((request.get_data()).decode('utf-8')) 4 print(type(request.get_data())) 5 csvdata = request.get_data() 6 print(csvdata)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/22 13:25
2018/11/22 13:30
2018/11/22 13:37
2018/11/22 13:41
2018/11/22 13:51
2018/11/23 00:46
2018/11/23 04:16
2018/11/23 04:42
2018/11/23 09:57 編集
2018/11/25 04:57
2018/11/25 05:23