У вас возникли проблемы с изготовлением декоративного декоратора django (с помощью args)

Поэтому я прочитал все подобные вопросы и скопировал то, что они написали, но у меня все еще есть проблемы. Поэтому я хочу что-то вроде этого

# Yes, I know django has one but I want to make my own @rate_limit(seconds=10) myview(request, somearg, *args, **kwargs): # Return a response ... def rate_limit(seconds=10): def decorator(view): def wrapper(request, *args, **kwargs): # Do some stuff return view(request, *args, **kwargs) return wrapper return decorator 

Когда я запускаю его, я получаю ошибку

 decorator() got an unexpected keyword argument 'somearg' 

Поэтому я добавляю декоратора, чтобы взять в args и kwargs и получить эту ошибку

 # New decorator signature def decorator(view, *args, **kwargs) 

и ошибка

 'function' object has no attribute 'status_code' 

edit: Таким образом, решение должно было использоваться. Спасибо Martijn Pieters !

 @rate_limit() 

вместо

 @rate_limit 

One Solution collect form web for “У вас возникли проблемы с изготовлением декоративного декоратора django (с помощью args)”

Ваша первая попытка работает очень хорошо, но вы, вероятно, забыли назвать rate_limit() декораторов rate_limit() .

Другими словами, ваша первая ошибка возникает, если вы выполните следующее:

 @rate_limit def myview(request, somearg, *args, **kwargs): 

вместо:

 @rate_limit(seconds=10) def myview(request, somearg, *args, **kwargs): 

Вы также действительно хотите использовать functools.wraps() на декораторах, используемых в Django, особенно если вы хотите смешать это с другими декораторами Django, такими как csrf_exempt :

 from functools import wraps def rate_limit(seconds=10): def decorator(view): @wraps(view) def wrapper(request, *args, **kwargs): # Do some stuff return view(request, *args, **kwargs) return wrapper return decorator 

Это гарантирует, что любые атрибуты, установленные для функции, подлежащей упаковке, будут правильно скопированы в оболочку.

  • Пример реального мира о том, как использовать свойство свойства в python?
  • Доступ к атрибуту функции, созданному в декораторе вне этого декоратора
  • исправить pyflakes, связанный с декоратором сетки @property
  • Награжденный класс утрачивает доступ к своим атрибутам
  • Дизайнеры декоративного оформления Django
  • Флакон: Декоратор для проверки схемы JSON и JSON
  • Как вернуть значение, когда @ click.option используется для передачи аргумента командной строки функции?
  • Как передать переменную класса в определение декоратора внутри класса?
  • Декораторы Python против передачи функций
  • Является ли Python Decorator таким же, как аннотация Java, или Java с аспектами?
  • Почему мой декоратор ломается для этой конечной точки флеш-входа?
  • Python - лучший язык программирования в мире.