Несколько параметров в приложении Flask

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

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

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

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

Но это не работает. Кто-нибудь может подсказать мне, как упомянуть approute?

8 ответов

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

@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, который я и некоторые другие комментаторы упомянули. Это дает вам дополнительную возможность присвоить ему значение по умолчанию (например, "Нет"), если оно отсутствует. Это обычно для параметров запроса, так как они часто являются необязательными.

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

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

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

С VVV и Feauure, передаваемыми в вашу функцию в качестве переменных.

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

Вы можете попробовать это:

--- Curl запрос ---

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

PS Не опускайте двойные кавычки (" ") с параметром curl, иначе это не работает в Linux, потому что "&"

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

from flask import request

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

В вашем запрашивающем 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"
}

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

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

Просто мы можем сделать это в два этапа: 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
      @app.route('/createcm')
def createcm():
    summary  = request.args.get('summary', type=str ,default='')
    change  = request.args.get('change',type=str , default='')

теперь вы можете запустить свою конечную точку с различными дополнительными параметрами, как показано ниже

      http://0.0.0.0:8888/createcm?summary=VVV  
              or
http://0.0.0.0:8888/createcm?change=Feauure
              or
http://0.0.0.0:8888/createcm?summary=VVV&change=Feauure
Другие вопросы по тегам