接受参数的 Flask get 方法:缺少 1 个必需的位置参数

sph*_*oid 4 python flask

我有以下烧瓶代码

from flask import Flask, jsonify, request                                                                                                                                                                          
from webargs import fields                                                                                                                                                                                         
from sqlalchemy import create_engine, MetaData, Table, select                                                                                                                                                      
from flask_cors import CORS                                                                                                                                                                                                                                                                                                                                                                                                           
engine = create_engine('...')                                                                                                                                                                                                                                                                                                                                            
////                                                                                                                                                                                                                                                                                                                                                                                                  
app = Flask(__name__)                                                                                                                                                                                                                                                                                                                                                                                                                 
cors = CORS(app, resources={r"/list*": {"origins": "*"}})                                                                                                                                                                                                                                                                                                                                                                             

@app.route('/list-vessels', methods=['GET'])                                                                                                                                                                       
def list_vessels():                                                                                                                                                                                                    
vessel_list = []                                                                                                                                                                                                   
s = select([vesseldetail.c.Vessel])                                                                                                                                                                                
rp = connection.execute(s)                                                                                                                                                                                         
for row in rp:                                                                                                                                                                                                         
    vessel_list.extend(list(row))                                                                                                                                                                                  
return jsonify(vessel_list)                                                                                                                                                                                                                                                                                                                                                                                                       

@app.route('/list-keydates', methods=['GET'])                                                                                                          
def list_keydates(vesselname):                                                                                                                                                                                         
    vesselname = request.args['vesselname']      
    intervention_list = []                                                                                                                                                                                             
    keydate_list = []                                                                                                                                                                                                  
    s = select([keydate.c.Intervention, keydate.c.Date])                                                                                                                                                               
    s = s.where(keydate.c.VESSEL==vesselname)                                                                                                                                                                          
    rp = connection.execute(s)                                                                                                                                                                                         
    for row in rp:                                                                                                                                                                                                         
        intervention_list.append((row[0]))                                                                                                                                                                                 
        keydate_list.append((row[1]))                                                                                                                                                                                  
    return jsonify({"keydates": keydate_list, "intervention": intervention_list})

if __name__ == '__main__':
    app.run(debug=True)  
Run Code Online (Sandbox Code Playgroud)

TypeError: list_keydates() missing 1 required positional argument: 'vesselname'即使我在查询字符串中传递容器名称,第二个端点“list-keydates”也会返回 a 。我究竟做错了什么?

Ken*_*res 6

vesselname定义 url 时缺少参数,请尝试以下操作:

...
@app.route('/list-keydates/<vesselname>', methods=['GET'])                                                                                                          
def list_keydates(vesselname):
    intervention_list = []                                                                                                                                                                                             
    keydate_list = []                                                                                                                                                                                                  
    s = select([keydate.c.Intervention, keydate.c.Date])                                                                                                                                                               
    s = s.where(keydate.c.VESSEL==vesselname)  
    ...
Run Code Online (Sandbox Code Playgroud)

网址应该是http://.../list-keydates/name-of-the-vessel

这样你就不必从请求参数中获取容器名称,它的值将被放置在变量函数中。

希望它适合你