Flask approute中的多个参数

use*_*205 39 python flask flash-message

如果我在URL调用中有多个参数,如何写烧瓶approute?

这是我从AJax调用的URL

http://0.0.0.0:8888/createcm?summary=VVV&change=Feauure
Run Code Online (Sandbox Code Playgroud)

我试图像这样写我的烧瓶approute.

@app.route('/test/<summary,change> ,methods=['GET']
Run Code Online (Sandbox Code Playgroud)

但这不起作用.任何人都可以建议我如何提及approute?

GMa*_*rsh 41

如果您确实想使用查询参数,其他答案都有正确的解决方案.就像是:

@app.route('/createcm')
def createcm():
   summary  = request.args.get('summary', None)
   change  = request.args.get('change', None)
Run Code Online (Sandbox Code Playgroud)

几点说明.如果您只需要支持GET请求,则无需在路由装饰器中包含这些方法.

解释查询参数.超越"?"的一切 在您的示例中称为查询参数.Flask将把这些查询参数从URL中取出并放入ImmutableDict中.您可以使用request.args密钥,即request.args['summary']使用get方法I和其他一些评论者提到的方式来访问它.这使您可以在不存在的情况下为其提供默认值(例如None).这对于查询参数来说很常见,因为它们通常是可选的.

现在还有另一个选项,你似乎试图在你的例子中做,那就是使用Path Param.这看起来像:

@app.route('/createcm/<summary>/<change>')
def createcm(summary=None, change=None):
    ...
Run Code Online (Sandbox Code Playgroud)

这里的网址是:http://0.0.0.0: 8888/createcm/VVV /Feauure

将VVV和Feauure作为变量传递给您的函数.

希望有所帮助.


Bur*_*lid 18

路由与查询字符串不匹配,查询字符串直接传递给您的方法.

from flask import request

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

  • 应该注意的是,在编写本文时,上述评论是不正确的,因为已经编辑了答案. (4认同)

Lit*_*oys 14

你可以试试这个:

---卷曲要求---

curl -i "localhost:5000/api/foo?a=hello&b=world"  
Run Code Online (Sandbox Code Playgroud)

---烧瓶服务器---

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)
Run Code Online (Sandbox Code Playgroud)

---控制台输出---

{'a': u'hello', 'b': u'world'}
Run Code Online (Sandbox Code Playgroud)

PS不要使用curl选项省略双引号(""),或者它在Linux中不起作用"cuz"&"


Wei*_*ang 7

在您的请求 url: 中http://0.0.0.0:8888/createcm?summary=VVV&change=Feauure,端点是/createcm请求?summary=VVV&change=Feauureargs一部分。所以你可以尝试这个:

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)
Run Code Online (Sandbox Code Playgroud)

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"
}
Run Code Online (Sandbox Code Playgroud)


Ano*_*rov 6

您混淆了 URL 参数和 URL 本身。

request.args.get("summary")您可以使用和来访问 URL 参数request.args.get("change")


小智 6

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


Vir*_*oop 5

我们可以简单地通过两个步骤来完成此操作: 1] Flask 中的代码 [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)
Run Code Online (Sandbox Code Playgroud)

2]在浏览器中点击网址:

http://127.0.0.1:5000/admin?from_date=%222018-01-01%22&to_date=%222018-12-01%22
Run Code Online (Sandbox Code Playgroud)