You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django类视图中限制用户仅访问自身账户页面?

解决方法

方法一:重写get_object方法

在MyAccountView中重写get_object方法,获取目标用户对象后验证是否与当前登录用户一致,不一致则抛出权限拒绝异常:

from django.core.exceptions import PermissionDenied
from django.views.generic import DetailView
from .models import CustomUser

class MyAccountView(DetailView):
    model = CustomUser

    def get_object(self, queryset=None):
        obj = super().get_object(queryset)
        if obj != self.request.user:
            raise PermissionDenied
        return obj

方法二:过滤查询集get_queryset

通过限制视图的查询集仅包含当前登录用户,这样访问其他用户ID时会直接返回404(查询集中无对应对象):

from django.views.generic import DetailView
from .models import CustomUser

class MyAccountView(DetailView):
    model = CustomUser

    def get_queryset(self):
        return super().get_queryset().filter(pk=self.request.user.pk)

方法三:简化URL(推荐)

既然用户只能访问自身页面,可直接移除URL中的<int:pk>参数,视图内直接调用当前登录用户:

修改URL配置:

path("user/", MyAccountView.as_view(), name='my_account'),

修改视图:

from django.views.generic import DetailView
from .models import CustomUser

class MyAccountView(DetailView):
    model = CustomUser

    def get_object(self, queryset=None):
        return self.request.user

额外:添加登录验证

务必给视图加上登录限制,确保未登录用户无法访问该页面,类视图可使用LoginRequiredMixin:

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import DetailView
from .models import CustomUser

class MyAccountView(LoginRequiredMixin, DetailView):
    model = CustomUser
    # 搭配上述任意一种权限验证逻辑

内容的提问来源于stack exchange,提问作者Carlitos_30

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:30:48