Для каждого аргумента, который вы указываете в своем определении 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