Несколько параметров в флажке

Как написать флягу, если у меня есть несколько параметров в вызове URL. Вот мой URL, который я звоню из AJax

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

Я пытался написать свою флягу, как это.

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

Но это не работает. Может ли кто-нибудь предложить мне, как упомянуть об утверждении?

Ответ 1

Другие ответы имеют правильное решение, если вы действительно хотите использовать параметры запроса. Что-то вроде:

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

Несколько заметок. Если вам нужно только поддерживать запросы GET, не нужно включать методы в свой декоратор маршрута.

Объяснить параметры запроса. Все, что находится за пределами? в вашем примере называется параметром запроса. Flask выведет эти параметры запроса из URL-адреса и поместит их в ImmutableDict. Вы можете получить к нему доступ с помощью request.args либо с ключом, то есть request.args['summary'], либо с методом get я и некоторыми другими комментаторами. Это дает вам дополнительную возможность присвоить ему значение по умолчанию (например, None), если оно отсутствует. Это часто встречается для параметров запроса, поскольку они часто являются необязательными.

Теперь есть еще один вариант, который вы, казалось бы, пытались сделать в своем примере, и использовать Path Param. Это будет выглядеть так:

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

URL-адрес здесь:   http://0.0.0.0:8888/createcm/VVV/Feauure

Когда VVV и Feauure передаются в вашу функцию как переменные.

Надеюсь, что это поможет.

Ответ 2

Маршруты не соответствуют строке запроса, которая напрямую передается вашему методу.

from flask import request

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

Ответ 3

Вы можете попробовать следующее:

--- Запрос на завивку ---

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

--- колбу-сервер ---

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)

--- вывод консоли ---

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

P.S. Не опускайте двойную кавычку ( ") с параметром curl, или она не работает в Linux cuz" &"

Ответ 4

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

Ответ 5

Вы смешиваете параметры URL и сам URL.

Вы можете получить доступ к параметрам URL с помощью request.args.get("summary") и request.args.get("change").

Ответ 6

В запросе url: http://0.0.0.0:8888/createcm?summary=VVV&change=Feauure конечная точка /createcm и ?summary=VVV&change=Feauure есть args часть запроса. поэтому вы можете попробовать следующее:

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 примеры:

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"
}

Ответ 7

Просто мы можем сделать это в двух случаях: 1] Код в колбе [app.py]

from flask import Flask,request

app = Flask(__name__)

@app.route('/')
def index():
    return "hello"

@app.route('/admin',methods=['POST','GET'])
def checkDate():
    return 'From Date is'+request.args.get('from_date')+ ' To Date is '+ request.args.get('to_date')


if __name__=="__main__":
    app.run(port=5000,debug=True)

2] Хит URL в браузере:

http://127.0.0.1:5000/admin?from_date=%222018-01-01%22&to_date=%222018-12-01%22