python - 烧瓶没有选择为发布请求提供的参数
问题描述
我创建了一个包含 post 方法的资源,该方法将 user_name、client_dict、order_detail_dict 作为参数/参数,如下所示
class CreateOrder(Resource):
def post(self, user_name, client_dict, order_detail_dict):
我使用端点 /create_order 注册了如下资源
api_createorders_addproducts.add_resource(CreateOrder, '/create_order')
如果我发帖请求为
http://127.0.0.1:5000/create_order?user_name={'name':'panda'}&client_dict={'clientname':'panda'}&order_detail_dict={'detail':'details}
它仍然告诉我
类型错误:post() 缺少 3 个必需的位置参数:“user_name”、“client_dict”和“order_detail_dict”
谁能指出错误,因为我在发布请求中传递了所有 3 个必需参数,但它仍然告诉我它丢失了。提前致谢
解决方案
对于您在post
定义中提供的每个参数,您还必须为它传递一个值,如下所示:
def post(self, user_name, client_dict, order_detail_dict):
pass
您需要一个包含所有这些参数的 url:
/create_order/<username>/<client_dict>/<order_detail_dict>
否则它将无法正常工作。
解决此问题的一种方法(因为您可能不想为每个 URL 定义这些)是提供默认值以防它们丢失并将它们转换为如下关键字参数:
def post(self, user_name=None, client_dict=None, order_detail_dict=None):
pass
然后你根本不需要它们,它们成为 URL 的可选部分。
视图函数中的参数映射到 URL 中的参数
但是,根据您的问题,您正在尝试发布一些数据。该数据根本不应该在您的 URL 字符串中。而是试试这个:
class CreateOrder(Resource):
def post(self):
json_data = request.get_json(force=True)
print(json_data)
然后您的发布请求将如下所示:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"name":"panda","client_dict": {"clientname": "panda"}, "order_detail_dict": {"detail": "details"}}' \
http://127.0.0.1:5000/create_order
推荐阅读
- java - 用于相同目的的 JDBC 和 Hibernate?
- javascript - 如何让我的关闭按钮在不同尺寸的屏幕上工作?
- html - 如何确保边框半径应用于图像而不是其容器?
- python - Python:重新排列方程以采用特定形式
- c# - 如何获取鼠标相对于世界的坐标?
- python - TypeError:“RelatedManager”对象不可迭代 - serializers.ListField()
- xamarin.forms - 在 Xamarin.forms 中从 Json 写入文本文件(或 PDF 文件)
- arrays - 如何在swift中过滤对象的3维数组
- python - 将文件从客户端上传到服务器时出现问题
- python - 如何更改 QCombobox 下拉项背景颜色的颜色