2017-01-02 1 views
0

MySQL에서 데이터를 얻을 수있는 API를 만들었습니다. stockList가 정의되어 있으면 작동합니다. 그러나 실제 세계에서는 Ionic 앱에서 가져와야하며 stockList는 개별 사용자에 의해 정의됩니다.플라스크 파이썬 : 플라스크에 이오니아 앱의 데이터를 받아들입니다.

간단히 넣어 stockList =[]가 작동하지 않습니다. 는 현재 flask_app.py은 다음과 같습니다 :

from flask import Flask,jsonify,abort,make_response,request 
import MySQLdb 
import MySQLdb.cursors 

app = Flask(__name__) 
@app.route('/KLSEwatch', methods=['GET']) 
def KLSEwatch(): 
    db = MySQLdb.connect(host='vinvin.mysql.pythonanywhere-services.com',user='vinvin',passwd='xxx',db='vinukdb$default',cursorclass=MySQLdb.cursors.DictCursor) 
    curs = db.cursor() 
    stockList = ['SHELL','GENM'] 
    placeholders = ','.join(['%s'] * len(stockList)) 
    query = 'SELECT * FROM KLSE WHERE Stock IN ({})'.format(placeholders) 
    curs.execute(query,tuple(stockList)) 
    f = curs.fetchall() 
    return jsonify({'Stock': f}) 

은 이오니아 응용 프로그램에서이다 사용자의 데이터를 얻을 것이다 나는이의 stocklist을 교체하여야한다 무엇. 데이터는 문자열 또는 4 개 자리 번호 아래

당신은 우리에게 이오니아 코드 중 하나를 보이지 않았다

//setting get counter-number of get requests- 
    var getCounter = 0; 
    for (var market in watchListQuery) { 
     if(watchListQuery[market].length>0){ 
     getCounter += 1; 
     } 
    } 
    if(getCounter == 0) 
     $ionicLoading.hide(); 


    $scope.watchedStocks = []; 
    for (var market in watchListQuery) { 
     if(watchListQuery[market].length>0){ 
     var queryString = watchListQuery[market].toString().replace(/,/g, "','"); 

     $webServicesFactory.get($marketProvider[market].queryURL+"/watchlist_query", {AnonymousToken: $marketProvider[market].token}, {parameters:{stockList:queryString}}).then(
      function success(data) { 
      getCounter -=1 ; 

      $scope.watchedStocks = $scope.watchedStocks.concat(data); 
      if(getCounter <= 0) 
       $ionicLoading.hide(); 
      }, 
      function error() { 
      $ionicLoading.hide(); 
      } 
     ); 
     } 
    }//end of for each loop 

답변

0

이온 애플리케이션에서 watchlistCtrl.js의 코드가 될 수 있지만 여기에 간단한 예제 이오니아 응용 프로그램에서 입력을 받아 플라스크에 제출하십시오. 첫째, 프론트 엔드에 대한 몇 가지 HTML (즉, 여기에 공통 주제이기 때문에 나는 단지, 각도 사용하고 있습니다 - 이온의 나머지 부분은이 문제에 관련이 없습니다) : 여기에

<!-- templates/home.html --> 
<!doctype html> 
<html lang="en"> 
<head> 
    <title>Ionic/Flask</title> 
</head> 
<body> 
<div ng-app="app"> 
    <div ng-controller="MyCtrl"> 
    <p>Enter a comma-separated string value, like "BAC,XYZ"</p> 
    <input type="text" ng-model="stockList"> 
    <button ng-click="submit()">Submit</button> 
    </div> 
</div> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.14/angular.js"></script> 
<script> 
    angular.module('app', []) 
    .controller('MyCtrl', function ($http, $log, $scope) { 
     $scope.stockList = ''; 
     $scope.submit = function() { 
     $http.get('/KLSEwatch', {params: {stockList: $scope.stockList}}).then(function (result) { 
      $log.log('This is the query to execute: ',result.data) 
     }) 
     }; 
    }) 
</script> 
</body> 
</html> 

가와의 수정 된 버전입니다 당신의 플라스크 응용 프로그램이 올바른 쿼리를 생성 함을 입증하기 :

# app.py 
from flask import Flask,jsonify,abort,make_response,request, render_template 
import MySQLdb 
import MySQLdb.cursors 

app = Flask(__name__) 
app.config['DEBUG'] = True 

@app.route('/') 
def home(): 
    return render_template('home.html') 

@app.route('/KLSEwatch', methods=['GET']) 
def KLSEwatch(): 
    stockList = request.args['stockList'].split(',') 
    placeholders = ','.join(['%s'] * len(stockList)) 
    query = 'SELECT * FROM KLSE WHERE Stock IN ({})'.format(placeholders) 
    print('This is the query: %s' % (query % tuple(stockList))) 
    return query % tuple(stockList) 

app.run() 

그런 다음, 응용 프로그램을 실행하면됩니다 제출 & 입력 필드에 문자열 값을 입력 할 필요가있는 결과를 확인을하여 브라우저 콘솔 로그 또는 Flask 앱의 출력에 표시됩니다.

+0

render_template ('home.html')을 반환하는 '@ pp.route ('/ ')'는 무엇을합니까? – vindex

+0

Ionic 코드 부분을 watchlistCtrl.js에 추가합니다. – vindex

관련 문제