2017-01-02 136 views
0

我创建了一个可以从MySQL获取数据的API。它在定义stockList时工作。但是,在现实世界中,我需要从Ionic应用程序获取它,并且stockList由个人用户定义。烧瓶Python:接受离子应用程序进入烧瓶的数据

简单的说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位数字

下面是离子应用在watchlistCtrl.js代码

//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

你没告诉我们你的任何离子的代码,但这里有一个简单的例子从您的Ionic应用程序获取输入并将其提交给Flask。首先,一些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

什么是'@ pp.route('/')'哪个'返回render_template('home.html')'? – vindex

+0

我添加它在watchlistCtrl.js中的Ionic代码部分 – vindex