Python 烧瓶未拾取为post请求提供的参数

Python 烧瓶未拾取为post请求提供的参数,python,flask,Python,Flask,我创建了一个包含post方法的资源,该方法将用户名、客户机名称、订单详细信息作为参数/参数,如下所示 类CreateOrderResource: def postself、用户名、客户名称、订单详细信息: 我用endpoint/create_顺序注册了资源,如下所示 api_createorders_addproducts.add_resourceCreateOrder,'/create_order' 如果我以 http://127.0.0.1:5000/create_order?user_na

我创建了一个包含post方法的资源,该方法将用户名、客户机名称、订单详细信息作为参数/参数,如下所示

类CreateOrderResource: def postself、用户名、客户名称、订单详细信息: 我用endpoint/create_顺序注册了资源,如下所示

api_createorders_addproducts.add_resourceCreateOrder,'/create_order' 如果我以

http://127.0.0.1:5000/create_order?user_name={'name':'panda'}和客户{'clientname':'panda'}和订单{'detail':'details}

它仍然告诉我

TypeError:post缺少3个必需的位置参数: “用户名”、“客户名称”和“订单详细信息”


有谁能指出错误,因为我在post请求中传递了所有3个必需的参数,但它仍然告诉我它丢失了。提前感谢您在帖子定义中提供的每一个参数,您还必须为其传递一个值,如下所示:

def postself、用户名、客户名称、订单详细信息: 通过 您需要一个包含所有这些参数的url:

/创建订单///

否则就不行了

由于您可能不希望在每个URL中都定义这些参数,因此解决此问题的一种方法是提供默认值,以防它们丢失,并将它们转换为关键字参数,如下所示:

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
def postself、用户名=None、客户号=None、订单号=None: 通过 然后您根本不需要它们,它们成为URL的可选部分

视图函数中的参数映射到URL中的参数

但是,基于您的问题,您正在尝试发布一些数据。这些数据不应该出现在URL字符串中。相反,请尝试以下方法:

类CreateOrderResource: def postself: json_data=request.get_jsonforce=True 打印数据 然后您的post请求将如下所示:

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

从post函数中删除参数,使用request.get_json并在postman上重新构造输入

class CreateOrder(Resource):
    def post(self):
        json_data = request.get_json(force=True)
        user_name = json_data['name']
        client_dict= json_data['client_dict']
        order_detail_dict= json_data['order_detail_dict']
        return jsonify(order_detail_dict)
将邮递员尸体原始更改为:

{
   "name":"panda",
   "client_dict":{"clientname":"panda"},
   "order_detail_dict":{"details":"detail"}
}

POST请求处理包含在消息正文中的数据,而不是作为参数传递的项目。我认为,由于这是POST请求,您的数据应该放在请求正文中,而不是URL的参数列表中。我尝试放在正文中,使用PostmanI仍会收到相同的错误。我认为您的参数在requests.args中,而不是post参数。对于post参数,您需要类似于此api的内容