Почему я получаю «AttributeError: объект« Юникод »не имеет атрибута« пользователь »» только для некоторых указанных URL-адресов? - PullRequest
4 голосов
/ 04 февраля 2011

Я использую декоратор @login_required в своем проекте с самого первого дня, и он работает нормально, но по какой-то причине я начинаю получать " AttributeError: у объекта 'unicode' нет атрибута 'user' 'для некоторых конкретных URL-адресов (и тех, которые работали в прошлом).

Пример. Я являюсь веб-сайтом, вошел в систему и затем нажимаю на ссылку, и я получаю эту ошибку, которая обычно связана с тем фактом, что SessionMiddleware не установлен. Но в моем случае есть один, так как я вошел на сайт, и на странице, на которой я нахожусь, также был @login_required.

Есть идеи?

URL определяется как: (r'^accept/(?P<token>[a-zA-Z0-9_-]+)?$', 'accept'), и метод как: @login_required def accept(request,token): ...

Traceback:

Traceback (most recent call last):
  File "/Users/macbook/virtualenv/proj/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 674, in __call__
    return self.application(environ, start_response)
  File "/Users/macbook/virtualenv/proj/lib/python2.6/site-packages/django/core/handlers/wsgi.py", line 241, in __call__
    response = self.get_response(request)
  File "/Users/macbook/virtualenv/proj/lib/python2.6/site-packages/django/core/handlers/base.py", line 141, in get_response
    return self.handle_uncaught_exception(request, resolver, sys.exc_info())
  File "/Users/macbook/virtualenv/proj/lib/python2.6/site-packages/django/core/handlers/base.py", line 165, in handle_uncaught_exception
    return debug.technical_500_response(request, *exc_info)
  File "/Users/macbook/virtualenv/proj/lib/python2.6/site-packages/django/core/handlers/base.py", line 100, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/Users/macbook/virtualenv/proj/lib/python2.6/site-packages/django/contrib/auth/decorators.py", line 25, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/Users/macbook/dev/pycharm-projects/proj/match/views.py", line 33, in accept
    return __process(token,callback)
  File "/Users/macbook/virtualenv/proj/lib/python2.6/site-packages/django/contrib/auth/decorators.py", line 24, in _wrapped_view
    if test_func(request.user):
AttributeError: 'unicode' object has no attribute 'user'`

Ответы [ 2 ]

10 голосов
/ 04 февраля 2011

Декоратор был закрытым методом, у которого нет запроса в качестве параметра. Я удалил этот декоратор (оставил там из-за рефакторинга и отсутствия теста [плохо меня]).

Проблема решена.

0 голосов
/ 20 ноября 2015

Это также может произойти, если вы вызываете декорированный метод из другого метода без предоставления параметра запроса.

...