Несколько параметров в приложении 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