【问题标题】:flask get method which accepts a parameter : Missing 1 required positional argument [duplicate]接受参数的烧瓶get方法:缺少1个必需的位置参数[重复]
【发布时间】:2020-07-05 00:02:07
【问题描述】:

我有以下烧瓶代码

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)  

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

【问题讨论】:

    标签: python flask


    【解决方案1】:

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

    ...
    @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)  
        ...
    

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

    这样您就不必从请求参数中获取vesselname,它的值将放在变量函数中。

    希望它适合你

    【讨论】:

    • 嗨。这行得通,谢谢!但我仍然想知道为什么另一件事没有。我需要如何编辑代码才能使用请求参数?
    • 没问题!要使用请求参数,您可以从函数中删除参数 - 例如:def list_keydates(): - 然后以下列方式调用 url:http://.../list-keydates?vesselname=name-of-the-vessel
    【解决方案2】:

    你也可以这样做

    当 URL 中有查询字符串时

    http://localhost:5000/list-keydates?vesselname=yourdata

    @app.route('/list-keydates', methods=['GET'])                                                                                                          
    def list_keydates():
        print(request.args['vesselname']                                                                                                                                                                        
        vesselname = request.args['vesselname']
    

    【讨论】:

      猜你喜欢
      • 2021-12-21
      • 1970-01-01
      • 2019-01-02
      • 2023-04-01
      • 2015-07-11
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      相关资源
      最近更新 更多