Django 中间件 - 'AnonymousUser' 对象不可迭代
Django Middleware - 'AnonymousUser' object is not iterable
context/code 的相关问题:
所以我刚刚得到帮助并得到了与此相关的其他问题的回答但是在我添加代码之后我发现每次未登录的用户查看该网站时他们都会看到下面的错误所以任何帮助不胜感激。谢谢
错误:'AnonymousUser' object is not iterable
C:\Users\...\account\banning\middleware.py in __call__
if(UserBanning.objects.filter(ban=True, user=request.user)): …
middleware.py:
from .models import UserBanning
from django.shortcuts import render, redirect
class BanManagement():
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if(UserBanning.objects.filter(ban=True, user=request.user)):
context = {
'banned': banned[0],
}
return render(request, "account/banned.html", context)
else:
response = self.get_response(request)
return response
models.py
from django.db import models
from django.contrib.auth.models import User
from django.conf import settings
class UserBanning(models.Model):
user = models.ForeignKey(User, verbose_name="Username", help_text="Choose Username", on_delete=models.CASCADE)
ban = models.BooleanField(default=True, verbose_name="Ban", help_text="Users Bans")
reason = models.CharField(max_length=500, blank=True)
class Meta:
verbose_name_plural = "User Banning"
ordering = ('user',)
def __str__(self):
return f"{self.user}"
像这样更改代码:
def __call__(self, request):
if request.user.is_authenticated:
banned = UserBanning.objects.filter(ban=True, user=request.user)
if banned.exists():
context = {
'banned': banned[0],
}
return render(request, "account/banned.html", context)
response = self.get_response(request)
return response
说明
我正在检查用户 is_authenticated
or not. If not authenticated, then there is no point for checking banned or not. Then I am querying through UserBanning
model to check if the user exists()
。
context/code 的相关问题:
所以我刚刚得到帮助并得到了与此相关的其他问题的回答但是在我添加代码之后我发现每次未登录的用户查看该网站时他们都会看到下面的错误所以任何帮助不胜感激。谢谢
错误:'AnonymousUser' object is not iterable
C:\Users\...\account\banning\middleware.py in __call__
if(UserBanning.objects.filter(ban=True, user=request.user)): …
middleware.py:
from .models import UserBanning
from django.shortcuts import render, redirect
class BanManagement():
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if(UserBanning.objects.filter(ban=True, user=request.user)):
context = {
'banned': banned[0],
}
return render(request, "account/banned.html", context)
else:
response = self.get_response(request)
return response
models.py
from django.db import models
from django.contrib.auth.models import User
from django.conf import settings
class UserBanning(models.Model):
user = models.ForeignKey(User, verbose_name="Username", help_text="Choose Username", on_delete=models.CASCADE)
ban = models.BooleanField(default=True, verbose_name="Ban", help_text="Users Bans")
reason = models.CharField(max_length=500, blank=True)
class Meta:
verbose_name_plural = "User Banning"
ordering = ('user',)
def __str__(self):
return f"{self.user}"
像这样更改代码:
def __call__(self, request):
if request.user.is_authenticated:
banned = UserBanning.objects.filter(ban=True, user=request.user)
if banned.exists():
context = {
'banned': banned[0],
}
return render(request, "account/banned.html", context)
response = self.get_response(request)
return response
说明
我正在检查用户 is_authenticated
or not. If not authenticated, then there is no point for checking banned or not. Then I am querying through UserBanning
model to check if the user exists()
。