У вас возникли проблемы с изготовлением декоративного декоратора 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 наследует ошибки docstring «только для чтения»
  • Изменение декоратора кулдауна для работы вместо методов вместо
  • Как я могу заставить декоратор Python работать после завершения декорированной функции?
  • Как пропустить pytest с помощью внешнего прибора?
  • Порядок выполнения декоратора
  • Python: Использование декораторов v / s mixins?
  • Flask-Login прерывается, когда мой декоратор принимает параметры
  • как сделать условный декоратор в python 2.6
  • Python - лучший язык программирования в мире.