Не могу POST, потому что мне не хватает аргументов - PullRequest
0 голосов
/ 06 апреля 2020

Я очень плохо знаком с Python и еще новее с Flask RESTful. Я пытаюсь проложить маршрут, и у меня возникают проблемы. Я получаю сообщение об ошибке при использовании Postman: "TypeError: post () отсутствует 3 обязательных позиционных аргумента: 'username', 'avatar' и 'friend_code' ', но у меня есть эти аргументы в теле моего POST запрос.

Ниже мой код. Я хочу иметь возможность POST только из root.

from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

users = []


class User(Resource):
    def get(self, username):
        # /<username>
        for user in users:
            if user['username'] == username:
                return user

    def post(self, username, avatar, friend_code):
        # / root
        user = {'username': username, 'avatar': avatar,
                'friend_code': friend_code}
        users.append(user)
        return user


api.add_resource(User, '/', '/<string:username>')


app.run(debug=True)

1 Ответ

2 голосов
/ 06 апреля 2020

Вашему методу post требуется 3 аргумента username, avatar, friend_code.

Когда вы делаете api.add_resource(User, '/', '/<string:username>'), вы передаете только один аргумент (имя пользователя). Итак, что насчет двух других (avatar & friend_code)?

Либо вы жестко закодируете их в некоторые постоянные значения, которые ваш метод post всегда может выбрать, либо используйте reqparse для анализа их из тела полезной нагрузки.

Примерно так:

from flask_restful import Resource, Api, reqparse
parser = reqparse.RequestParser()

def post(self):
        parser.add_argument('avatar', type=str)
        parser.add_argument('friend_code', type=str)
        args = parser.parse_args()

        user = {'username': username, 'avatar': avatar,
                'friend_code': friend_code}
        users.append(user)
        return user

Ниже приводится хорошая ссылка для начала Создание Basi c RESTful API с Flask -RESTful .

...