2014-04-24 34 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