2015-06-11 19 views
17

Tôi muốn tạo ra một nguồn lực hỗ trợ GET yêu cầu theo cách sau:bình yên tĩnh: truyền tham số để GET yêu cầu

/bar?key1=val1&key2=val2 

Tôi đã thử mã này, nhưng nó không làm việc

app = Flask(__name__) 
api = Api(app) 

class BarAPI(Resource): 
    def get(key1, key2): 
     return jsonify(dict(data=[key1, key2])) 

api.add_resource(BarAPI, '/bar', endpoint='bar') 

Cảm ơn!

+0

một chút đã trôi qua kể từ khi bạn đặt câu hỏi và câu trả lời bạn đã chọn sử dụng API không được chấp nhận. Bạn có thể cập nhật câu trả lời được chấp nhận không? – Stereo

+0

thực sự, có một thư viện tốt hơn được gọi là flask_restful, trong đó bạn có thể định nghĩa tài nguyên ('hooks' vào cơ sở dữ liệu của bạn xác định các hoạt động CRUD), thêm chúng vào API và liên kết API đó với Flask bằng Blueprints. Trong đó, bạn sẽ tìm thấy lớp RequestParser để phân tích cú pháp các đối số được truyền như một thân tài liệu. – OzzyTheGiant

Trả lời

12

Flask có thể phân tích lập luận thông qua yêu cầu

from flask import request 

Bạn có thể sử dụng dòng sau trong khối mà đòi hỏi tham số GET. GET được khai báo trong khai báo @app.route().

args = request.args 
print (args) # For debugging 
no1 = args['key1'] 
no2 = args['key2'] 
return jsonify(dict(data=[no1, no2])) # or whatever is required 
25

Chỉnh sửa: Đây không còn là cách được khuyến nghị để làm điều này với bình tĩnh! Đối tượng reqparse không được chấp nhận, hãy xem docs để thay thế được đề xuất.


Sử dụng reqparse. Bạn có thể thấy một ví dụ khác trong bình tĩnh-restful docs.

Nó thực hiện xác thực trên các tham số và không yêu cầu jsonify.

from flask import Flask 
from flask_restful import Resource, Api, reqparse 

app = Flask(__name__) 
api = Api(app) 

class BarAPI(Resource): 
    def get(self): 

     parser = reqparse.RequestParser() 
     parser.add_argument('key1', type=str) 
     parser.add_argument('key2', type=str) 

     return parser.parse_args() 

api.add_resource(BarAPI, '/bar', endpoint='bar') 

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

Kể từ reqparse bị phản đối ở đây là một giải pháp sử dụng thư viện WebArgs:

from flask import Flask 
from flask_restful import Api, Resource, abort 
from webargs import fields, validate 
from webargs.flaskparser import use_kwargs, parser 

app = Flask(__name__) 
api = Api(app) 

class Foo(Resource): 
    args = { 
     'bar': fields.Str(
      required=True, 
      validate=validate.OneOf(['baz', 'qux']), 
     ), 
    } 

    @use_kwargs(args) 
    def get(self, bar): 
     return {'bar': bar} 

api.add_resource(Foo, '/foo', endpoint='foo') 

# This error handler is necessary for usage with Flask-RESTful. 
@parser.error_handler 
def handle_request_parsing_error(err): 
    abort(422, errors=err.messages) 

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

Để biết thêm ví dụ có một cái nhìn tại Flask-RESTful example trong kho WebArgs.

+0

Giải pháp tuyệt vời, nó đã giúp tôi rất nhiều! – Stereo

Các vấn đề liên quan