首页 > 解决方案 > /app/accounts/login/ 'AnonymousUser' 对象的 TypeError 不可迭代(context_processors.py)

问题描述

我在我的context_processors.py

if request.user.is_authenticated:
    recent_notifications = Notification.objects.filter(user=request.user,is_deleted=False)
else:
    recent_notifications = []


profile = None
if Profile.objects.filter(user=request.user).exists():
    profile = Profile.objects.get(user=request.user)

它返回

/app/accounts/login/ 处的类型错误

'AnonymousUser' 对象不可迭代

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/app/accounts/login/?next=/

Django Version: 2.2.7
Python Version: 3.6.8
Installed Applications:
['registration',
 'django.contrib.admin',
 'django.contrib.sites',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'main',
 'users',
 'profiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  145.                 response = self.process_exception_by_middleware(e, request)

File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  143.                 response = response.render()

File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/template/response.py" in render
  106.             self.content = self.rendered_content

File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/template/response.py" in rendered_content
  83.         content = template.render(context, self._request)

File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/template/backends/django.py" in render
  61.             return self.template.render(context)

File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/template/base.py" in render
  169.                 with context.bind_template(self):

File "/usr/lib/python3.6/contextlib.py" in __enter__
  81.             return next(self.gen)

File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/template/context.py" in bind_template
  246.             updates.update(processor(self.request))

File "/home/cirtic/dev/django/cyan/src/cyan/main/context_processors.py" in main_context
  29.     if Profile.objects.filter(user=request.user).exists():

File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/db/models/manager.py" in manager_method
  82.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/db/models/query.py" in filter
  892.         return self._filter_or_exclude(False, *args, **kwargs)

File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/db/models/query.py" in _filter_or_exclude
  910.             clone.query.add_q(Q(*args, **kwargs))

File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/db/models/sql/query.py" in add_q
  1290.         clause, _ = self._add_q(q_object, self.used_aliases)

File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/db/models/sql/query.py" in _add_q
  1318.                     split_subq=split_subq, simple_col=simple_col,

File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/db/models/sql/query.py" in build_filter
  1224.             self.check_related_objects(join_info.final_field, value, join_info.opts)

File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/db/models/sql/query.py" in check_related_objects
  1086.                 for v in value:

File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/utils/functional.py" in inner
  257.         return func(self._wrapped, *args)

Exception Type: TypeError at /app/accounts/login/
Exception Value: 'AnonymousUser' object is not iterable

我试图更改if request.user.is_authenticated:为 ifrequest.user.is_authenticated():我在某些问题中发现的那样,但它会返回'bool' object is not callable。我正在写这个,因为这可能被误认为是这个问题 这里我有问题

profile = None
if Profile.objects.filter(user=request.user).exists():
    profile = Profile.objects.get(user=request.user)

标签: djangodjango-authentication

解决方案


试试这个方法:

    if not request.user.is_authenticated:
        recent_notifications = []
    else:
        recent_notifications = Notification.objects.filter(user=request.user,is_deleted=False)

否则,您必须通过添加登录所需的装饰器或类似方式来限制用户。


推荐阅读