我如何使用 user_passes_test 查看特定页面?

How do i use user_passes_test view specific page?

我的用户模型

SELLER = "SELLER"
CUSTOMER = "CUSTOMER"
USER_TYPE_CHOICES = (
    ('SELLER' , 'Seller'),
    ('CUSTOMER' , 'Customer'),    
)
class User(AbstractBaseUser,PermissionsMixin):
    email = models.EmailField( max_length=255, unique=True)
    user_type = models.CharField(max_length=200,choices=USER_TYPE_CHOICES,null=True)
    last_login = models.DateTimeField( blank=True, null=True)


    is_staff = models.BooleanField( default=False)
    is_superuser = models.BooleanField( default=False)

    is_active = models.BooleanField( default=True)
    date_joined = models.DateTimeField(default=timezone.now)

    objects = UserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    class Meta:
        ordering = ['email']

    def clean(self):
        super().clean()
        self.email = self.__class__.objects.normalize_email(self.email)

    def get_full_name(self):
        return self.email

    def get_short_name(self):
        return self.email

我有两个 user_types 一个卖家和一个顾客 我如何使用 user_passes_test 装饰器来查看 user.user_type 是否是卖家以便他可以看到卖家仅查看卖家可以看到卖家视图

def seller_home(request,pk):
    try:
        seller =  Seller.objects.get(id=pk)
    except User.DoesNotExist:
        raise Http404("Seller Does Not Exisit")
    
    sellerproducts = Product.objects.filter(seller=seller)
    totalsellerproducts = sellerproducts.count()
    context = {'seller':seller,'sellerproducts':sellerproducts,"totalsellerproducts":totalsellerproducts }
    return render(request,"seller_home.html",context)

我认为你不能,因为 user_passes_test 仅供经过身份验证的用户使用,因此无法通过 URL 将卖家或客户发送到视图,因为这将是不安全的,任何人将能够测试任何 pk,您必须使用 request.user 中的经过身份验证的用户来执行此操作,然后装饰器将很容易。像这样:

def seller_check(user):
    return user.user_type == User.SELLER

@user_passes_test(seller_check)
def seller_home(request):
    pass