маршрутизация колб не выполняется при нескольких запросах на получение

#python #flask

Вопрос:

пытаюсь получить 2 запроса на получение

  1. Все пользователи
  2. Идентификатор пользователя
  from http import HTTPStatus
from app import db
from flask_restful import Resource, marshal_with
import app.dal.models as models
from app.resources.authentication.authentication_utils import user_creation_parser
import app.resources.errors as errors


class User(Resource):
    MINIMUM_PASSWORD_LENGTH = 10

    @marshal_with(models.User.marshaller())
    def get(self, *args):
        if len(args)>0:
            user = models.User.query.get(args[0])
            if not user:
                raise errors.NoSuchUser
            return user, HTTPStatus.OK
        else:
            users = models.User.query.all()
            if not users:
                raise errors.NoUsersFound
            return users, HTTPStatus.OK

 
 get 127.0.0.1:5000/user  
 

результат все пользователи

 get 127.0.0.1:5000/user/1
 

неудачи

при попытке выполнить 2 отдельные функции

     @marshal_with(models.User.marshaller())
    def get(self, user_id):
        user = models.User.query.get(user_id)
        if not user:
            raise errors.NoSuchUser
        return user, HTTPStatus.OK

    @marshal_with(models.User.marshaller())
    def get(self):
        users = models.User.query.all()
        if not users:
            raise errors
        return users, HTTPStatus.OK
 

получите тот же результат.

наличие только 1 функции в каждой из них работает нормально.

Комментарии:

1. Вы не можете перегружать функции в Python. Укажите user значение по умолчанию (например None ).

2. технически вы можете перегрузиться, @singledispatch но не пробовали это с колбой. docs.python.org/3/library/…

3. @eagr Это аккуратный маленький трюк с использованием некоторых функций отражения и регистрации. Он имитирует перегрузку, но это не перегрузка. В конце концов, пространство имен класса-это словарь, и в нем может быть только один ключ get .