Python 烧瓶法中的多参数

Python 烧瓶法中的多参数,python,flask,flash-message,Python,Flask,Flash Message,如果URL调用中有多个参数,如何编写flaskapp.route 以下是我从AJax调用的URL: http://0.0.0.0:8888/createcm?summary=VVV&change=Feauure 我试着这样写我的flaskapp.route: @app.route('/test/<summary,change>', methods=['GET'] @app.route('/test/',methods=['GET'] 但这不起作用。有人能建议我如何提及应

如果URL调用中有多个参数,如何编写flask
app.route

以下是我从AJax调用的URL:

http://0.0.0.0:8888/createcm?summary=VVV&change=Feauure
我试着这样写我的flask
app.route

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

但这不起作用。有人能建议我如何提及
应用程序路径吗?

你把URL参数和URL本身弄混了


您可以通过
request.args.get(“summary”)
request.args.get(“change”)
访问URL参数。路由与查询字符串不匹配,查询字符串直接传递给您的方法

from flask import request

@app.route('/createcm', methods=['GET'])
def foo():
   print request.args.get('summary')
   print request.args.get('change')
您可以尝试以下方法:

---卷曲请求---

---烧瓶服务器---

---控制台输出---


注意:不要用curl选项省略双引号(“”),否则它在Linux中不起作用,因为在您请求的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)
示例:

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

如果确实要使用查询参数,则其他答案具有正确的解决方案。例如:

@app.route('/createcm')
def createcm():
   summary  = request.args.get('summary', None)
   change  = request.args.get('change', None)
注意:如果您只需要支持GET请求,则无需在路由装饰器中包含这些方法

解释查询参数。在您的示例中,除了“?”之外的所有内容都称为查询参数。Flask将从URL中取出这些查询参数,并将它们放入一个不可变的dict中。您可以通过
request.args
访问它,也可以使用键,即
request.args['summary']
或使用我和其他一些评论员提到的get方法。这使您能够在不存在的情况下为其提供默认值(如None)。这对于查询参数很常见,因为它们通常是可选的

现在,在您的示例中,有另一个您似乎正在尝试执行的选项,即使用Path参数。该选项如下所示:

@app.route('/createcm/<summary>/<change>')
def createcm(summary=None, change=None):
    ...
@app.route('/createcm/'))
def createcm(摘要=无,更改=无):
...
此处的url为:

VVV和Feauure作为变量传递到函数中


希望这能有所帮助。

简单来说,我们可以在两个STPE中实现这一点: 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', None)
   change  = request.args.get('change', None)
@app.route('/createcm/<summary>/<change>')
def createcm(summary=None, change=None):
    ...
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)
http://127.0.0.1:5000/admin?from_date=%222018-01-01%22&to_date=%222018-12-01%22