如果URL调用中有多个参数,如何编写随机播放器?
这是我从AJax调用的网址
http://0.0.0.0:8888/createcm?summary=VVV&change=Feauure
我试图像这样写我的烧瓶approute。
@app.route('/test/<summary,change> ,methods=['GET']
但这不起作用。任何人都可以建议我如何提及approute吗?
答案 0 :(得分:34)
如果您确实想使用查询参数,其他答案都有正确的解决方案。类似的东西:
@app.route('/createcm')
def createcm():
summary = request.args.get('summary', None)
change = request.args.get('change', None)
一些笔记。如果您只需要支持GET请求,则无需在路由装饰器中包含这些方法。
解释查询参数。超越&#34;?&#34;在您的示例中称为查询参数。 Flask将把这些查询参数从URL中取出并放入ImmutableDict中。您可以通过request.args
访问它,使用密钥,即request.args['summary']
或使用get方法I和其他一些评论者提到的。这使您可以在不存在的情况下为其提供默认值(例如None)。这对于查询参数来说很常见,因为它们通常是可选的。
现在还有另一个选项,你似乎试图在你的例子中做,那就是使用Path Param。这看起来像是:
@app.route('/createcm/<summary>/<change>')
def createcm(summary=None, change=None):
...
这里的网址是: http://0.0.0.0:8888/createcm/VVV/Feauure
将VVV和Feauure作为变量传递给您的函数。
希望有所帮助。
答案 1 :(得分:17)
路由与查询字符串不匹配,查询字符串直接传递给您的方法。
from flask import request
@app.route('/createcm', methods=['GET'])
def foo():
print request.args.get('summary')
print request.args.get('change')
答案 2 :(得分:13)
你可以试试这个:
---卷曲请求---
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'}
P.S。不要使用curl选项省略双引号(&#34;&#34;),否则它在Linux中不起作用&#34;&amp;&#34;
答案 3 :(得分:6)
@app.route('/createcm', methods=['GET'])
def foo():
print request.args.get('summary')
print request.args.get('change')
答案 4 :(得分:4)
您正在混淆网址参数和网址本身。
您可以使用request.args.get("summary")
和request.args.get("change")
访问网址参数。
答案 5 :(得分:1)
在您的请求网址: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"
}
答案 6 :(得分:0)
我们可以分两个步骤进行操作: 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]在浏览器中点击网址:
http://127.0.0.1:5000/admin?from_date=%222018-01-01%22&to_date=%222018-12-01%22
答案 7 :(得分:0)
在flak中我们这样做
@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