【问题标题】:Django Middleware - 'AnonymousUser' object is not iterableDjango 中间件 - 'AnonymousUser' 对象不可迭代
【发布时间】:2019-11-07 04:21:45
【问题描述】:

上下文/代码的相关问题:My Django Middleware Isn't Working The Way It Should

所以我刚刚得到了帮助,并得到了与此相关的另一个问题的答案,但是在我添加了代码后,我现在发现,每次未登录的用户查看网站时,他们都会看到下面的错误,因此有任何帮助受到赞赏。谢谢

错误:'AnonymousUser' object is not iterable

C:\Users\...\account\banning\middleware.py in __call__
        if(UserBanning.objects.filter(ban=True, user=request.user)): …

中间件.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}"

【问题讨论】:

    标签: django middleware


    【解决方案1】:

    修改代码如下:

    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。如果未通过身份验证,则检查是否禁止是没有意义的。然后我通过UserBanning模型查询用户exists()

    【讨论】:

    • 现在当用户登录时,我收到此错误list index out of range,因为'banned': banned[0],
    猜你喜欢
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2013-10-10
    相关资源
    最近更新 更多