2014-04-24 32 views
2
import config 
from flask import Flask, jsonify, request 
## app and db is defined on model.py 
from model import db, app, PLAY_STORE 
@app.route('/app-api', methods=['GET']) 
def listapp(): 
    if request.method == 'GET': 
     store=request.args.get('store') 
     category=request.args.get('category') 
     results = PLAY_STORE.query.filter_by(Store=store,Category=category).all() 
     json_results = [] 
     for result in results: 
      d = {'rank': result.Rank, 
      'store': result.Store, 
      'category': result.Category, 
      'type': result.Type, 
      'title': result.Title} 
      json_results.append(d) 

    return jsonify(items=json_results) 

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

我想在使用燒瓶的mysql數據庫上構建一個休息api。 在上面的程序中,我試圖從url中獲取商​​店和類別。即使我使用request.args.get,Store值爲空,即json_results爲空。如果我的硬代碼製作PLAY_STORE.query.filter_by(Store="Play Store")我正在獲得預期的輸出。但是,當我輸入127.0.0.1/app-api?store="Play Store"時,json_results爲空。使用燒瓶從url獲取多個參數

我還有一個問題。如何在filter_by中放置多個條件,如PLAY_STORE.query.filter_by(Store="Play Store" and Category="Games")

+0

首先,你不應該在網址中放置空格。大多數時候使用'%20'而不是空格(stackoverflow使用'''',正如你所看到的那樣)。所以試試127.0.0.1/app-api?store="Play%20Store「 – fr1tz

+0

'filter_by'接受'** kwargs'。因此,您可以逗號分隔鍵值對,例如'PLAY_STORE.query.filter_by(Store =「Play Store」,Category =「Games」)'。請避免在變量名中使用大寫字母,並閱讀[pep8](http://legacy.python.org/dev/peps/pep-0008/) – msvalkon

+0

謝謝!! PLAY_STORE.query.filter_by(Store =「Play Store',Category =「games」)正在工作 – user3446000

回答

0

問題是在你獲取URL參數

試試這個網址:

127.0.0.1:5000/app-api?store=Play Store&category=Games 

你並不需要在查詢字符串值發送單引號,即

<your-host>/?store=XXXXXX not like this <your-host>/?store='XXXXXX' 

而且,filter_by是用於簡單查詢,如果您想使複雜查詢使用filter和更多信息請通過此StackOverflow question