2013-03-03 24 views
16

Cách viết approute của bình nếu tôi có nhiều tham số trong cuộc gọi URL. Đây là URL của tôi mà tôi đang gọi từ AJaxNhiều tham số trong Flask approute

  http://0.0.0.0:8888/createcm?summary=VVV&change=Feauure 

Tôi đang cố gắng viết bình phun của tôi như thế này.

   @app.route('/test/<summary,change> ,methods=['GET'] 

Nhưng điều này không hoạt động. Bất cứ ai có thể đề nghị tôi làm thế nào để đề cập đến aproute?

Trả lời

4

Bạn đang trộn các thông số URL và chính URL đó.

Bạn có thể truy cập thông số URL với request.args.get("summary")request.args.get("change").

14

Các tuyến đường không khớp với chuỗi truy vấn, được chuyển trực tiếp đến phương pháp của bạn.

from flask import request 

@app.route('/createcm', methods=['GET']) 
def foo(): 
    print request.args.get('summary') 
    print request.args.get('change') 
+1

Cái này sai.'yêu cầu' không được cung cấp cho foo() làm đối số. Kiểm tra xiaopengs câu trả lời cho đúng. – kramer65

+2

Cần lưu ý rằng nhận xét ở trên không chính xác tại thời điểm viết, vì câu trả lời đã được chỉnh sửa. – Doormatt

6
@app.route('/createcm', methods=['GET']) 
def foo(): 
    print request.args.get('summary') 
    print request.args.get('change') 
9

Bạn có thể thử này:

--- Curl yêu cầu ---

curl -i "localhost:5000/api/foo?a=hello&b=world" 

--- bình máy chủ ---

from flask import Flask, request 

app = Flask(__name__) 


@app.route('/api/foo/', methods=['GET']) 
def foo(): 
    bar = request.args.to_dict() 
    print bar 
    return 'success', 200 

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

- - đầu ra vô hiệu ---

{'a': u'hello', 'b': u'world'} 

P.S. Đừng bỏ qua đôi ngoặc kép (" ') với tùy chọn curl, hoặc nó không hoạt động trong Linux cuz' &"

1

Trong url yêu cầu của bạn: http://0.0.0.0:8888/createcm?summary=VVV&change=Feauure, điểm cuối là /createcm?summary=VVV&change=Feauureargs phần của yêu cầu. vì vậy bạn có thể thử này:

from flask import Flask, request, jsonify 

app = Flask(__name__) 

@app.route('/createcm', methods=['get']) 
def create_cm(): 
    summary = request.args.get('summary', None) # use default value repalce 'None' 
    change = request.args.get('change', None) 
    # do something, eg. return json response 
    return jsonify({'summary': summary, 'change': change}) 


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

httpie ví dụ:

http get :5000/createcm summary==vvv change==bbb -v 
GET /createcm?summary=vvv&change=bbb HTTP/1.1 
Accept: */* 
Accept-Encoding: gzip, deflate 
Connection: keep-alive 
Host: localhost:5000 
User-Agent: HTTPie/0.9.8 



HTTP/1.0 200 OK 
Content-Length: 43 
Content-Type: application/json 
Date: Wed, 28 Dec 2016 01:11:23 GMT 
Server: Werkzeug/0.11.13 Python/3.6.0 

{ 
    "change": "bbb", 
    "summary": "vvv" 
} 
9

Những câu trả lời khác có giải pháp chính xác nếu bạn thực sự muốn sử dụng params truy vấn. Một cái gì đó như:

@app.route('/createcm') 
def createcm(): 
    summary = request.args.get('summary', None) 
    change = request.args.get('change', None) 

Một vài lưu ý. Nếu bạn chỉ cần hỗ trợ các yêu cầu GET, không cần bao gồm các phương thức trong trình trang trí tuyến đường của bạn.

Để giải thích thông số truy vấn. Mọi thứ vượt quá "?" trong ví dụ của bạn được gọi là tham số truy vấn. Flask sẽ lấy các tham số truy vấn đó ra khỏi URL và đặt chúng vào một ImmutableDict. Bạn có thể truy cập nó bằng request.args, hoặc bằng khóa, tức là request.args['summary'] hoặc với phương thức nhận được mà tôi và một số người nhận xét khác đã đề cập. Điều này mang lại cho bạn khả năng bổ sung để cung cấp cho nó một giá trị mặc định (chẳng hạn như None), trong trường hợp nó không có mặt. Điều này là phổ biến cho các tham số truy vấn vì chúng thường là tùy chọn.

Bây giờ có một tùy chọn khác mà bạn dường như đang cố gắng thực hiện trong ví dụ của mình và đó là sử dụng Thông số đường dẫn.Điều này sẽ trông giống như:

@app.route('/createcm/<summary>/<change>') 
def createcm(summary=None, change=None): 
    ... 

Url đây sẽ là: http://0.0.0.0:8888/createcm/VVV/Feauure

Với VVV và Feauure được thông qua vào chức năng của bạn như biến.

Hy vọng điều đó sẽ hữu ích.

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