#python #flask
Вопрос:
пытаюсь получить 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
.