Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django中间件-';匿名用户';对象是不可编辑的_Django_Middleware - Fatal编程技术网

Django中间件-';匿名用户';对象是不可编辑的

Django中间件-';匿名用户';对象是不可编辑的,django,middleware,Django,Middleware,上下文/代码的相关问题: 所以我得到了帮助,并回答了与此相关的另一个问题,但在我添加代码后,我发现现在每次未登录的用户查看站点时,他们都会看到下面的错误,因此,任何与此相关的帮助都将受到感谢。谢谢 错误:“匿名用户”对象不可编辑 C:\Users\...\account\banning\middleware.py in __call__ if(UserBanning.objects.filter(ban=True, user=request.user)): … middlewa

上下文/代码的相关问题:

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

错误:
“匿名用户”对象不可编辑

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
解释
我正在检查是否有用户。如果没有经过身份验证,那么就没有必要检查是否被禁止。然后我通过
UserBanning
model查询,以检查用户是否更改代码。

如下所示:

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
解释
我正在检查是否有用户。如果没有经过身份验证,那么就没有必要检查是否被禁止。然后,我通过
UserBanning
模型查询,以检查用户是否已登录。

现在,当用户登录时,我将此错误
列表索引超出范围
,因为
“禁止”:禁止[0],
现在,当用户登录时,我将此错误
列表索引超出范围
因为
“禁止”:禁止[0],