Flask接口报错:user_delete_connector()收到意外关键字参数'id'
解决Flask Delete接口参数传递报错问题
错误原因
报错user_delete_connector() got an unexpected keyword argument 'id'的核心原因是你的auth.token_auth()装饰器没有正确传递路由中的关键字参数到视图函数。Flask会将路由中定义的<id>作为关键字参数传递给视图函数,但如果认证装饰器的包装逻辑没有传递这些关键字参数,就会触发该错误。
解决方案
方案1:修复认证装饰器的参数传递逻辑
检查auth.token_auth()装饰器的实现,确保其内部包装函数接收并传递所有参数(位置参数和关键字参数)。正确的装饰器示例如下:
from functools import wraps from flask import request def token_auth(): def decorator(view_func): @wraps(view_func) def wrapped_view(*args, **kwargs): # 这里添加你的token认证逻辑 # 例如:验证请求头中的token有效性 # ... # 调用原视图函数时,必须传递所有接收的参数 return view_func(*args, **kwargs) return wrapped_view return decorator
方案2:修改视图函数的参数接收方式(无需修改装饰器)
如果无法调整认证装饰器的代码,可以直接从Flask的request对象中获取路由参数,或者用关键字参数集合接收:
方式A:从request对象获取参数
from flask import request @app.route('/users/delete/<id>', methods=['DELETE']) @auth.token_auth() def user_delete_connector(): user_id = request.view_args.get('id') return obj.user_delete_model(user_id)
方式B:用**kwargs接收参数
@app.route('/users/delete/<id>', methods=['DELETE']) @auth.token_auth() def user_delete_connector(**kwargs): return obj.user_delete_model(kwargs['id'])
方案3:强制使用关键字参数传递(可选)
修改视图函数定义,仅接收关键字参数(Python 3+支持),确保参数传递匹配:
@app.route('/users/delete/<id>', methods=['DELETE']) @auth.token_auth() def user_delete_connector(*, id): return obj.user_delete_model(id)
内容的提问来源于stack exchange,提问作者Mohit Bhatt
相关产品推荐
相关产品推荐

