python 培养瓶中的多个参数

k5ifujac  于 2022-12-25  发布在  Python
关注(0)|答案(8)|浏览(153)

如果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

e0uiprwp

e0uiprwp1#

如果您确实想使用查询参数,其他答案会给出正确的解决方案,例如:

@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 Param。

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

此处的URL应为:http://0.0.0.0:8888/createcm/VVV/Feauure
VVV和Feauure作为变量传递给函数。

oalqel3c

oalqel3c2#

你可以试试这个:

curl 请求

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

flask服务器

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中不起作用,因为"&"

7eumitmz

7eumitmz3#

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

from flask import request

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

qhhrdooz4#

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

eblbsuwk5#

在您的请求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"
}
ikfrs5lh

ikfrs5lh6#

您混淆了URL参数和URL本身。
您可以使用request.args.get("summary")request.args.get("change")访问URL参数。

5hcedyr0

5hcedyr07#

简单地说,我们可以分两步来完成: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)

2]点击浏览器中的URL:

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

k0pti3hp8#

在高射炮中我们是这样做

@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

相关问题