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

Django项目中限制用户仅访问自身详情页面的问题

解决Django个人资料页面访问权限限制问题

要实现仅登录用户能访问自身详情页、禁止访问其他用户页面,只需在视图中添加URL用户名与当前登录用户的一致性校验,具体修改如下:

1. 修改views.py代码

在details函数开头增加权限判断逻辑,同时优化用户查询避免异常:

from django.shortcuts import get_object_or_404
from django.http import HttpResponseForbidden

@login_required(login_url="signin")
def details(request, username):
    # 校验URL中的用户名是否与当前登录用户一致
    if username != request.user.username:
        # 不一致则返回403禁止访问,也可替换为重定向到用户自身详情页
        return HttpResponseForbidden("无权访问该页面")
        # 重定向写法:return redirect("details", username=request.user.username)
    
    # 用get_object_or_404替代get,避免用户名不存在时抛出未捕获异常
    user = get_object_or_404(User, username=username)
    form = Details()
    if request.method == "POST":
        form = Details(request.POST, request.FILES)
        if form.is_valid():
            detail = form.save(commit=False)
            detail.username = request.user
            detail.save()
            return redirect(success, pk=detail.pk)
    else:
        form = Details(initial={"matricno":request.user.username})
    return render(request, "details.html", {"form":form})

2. 逻辑说明

  • 权限拦截:直接对比URL传入的username和当前登录用户的request.user.username,不一致则拒绝访问。
  • 异常防护:使用get_object_or_404替代User.objects.get(),当URL输入不存在的用户名时,自动返回404页面,避免服务器报错。
  • 响应可选:可根据需求选择返回403提示页,或直接重定向到用户自身的详情页,提升体验。

额外简化方案(可选)

如果用户仅需访问自身页面,可直接去掉URL中的用户名参数,从根源避免篡改问题:

  • 修改urls.py:
urlpatterns = [
    path("details/", views.details, name="details"),
]
  • 修改views.py(移除username参数):
@login_required(login_url="signin")
def details(request):
    user = request.user
    form = Details()
    if request.method == "POST":
        form = Details(request.POST, request.FILES)
        if form.is_valid():
            detail = form.save(commit=False)
            detail.username = request.user
            detail.save()
            return redirect(success, pk=detail.pk)
    else:
        form = Details(initial={"matricno":request.user.username})
    return render(request, "details.html", {"form":form})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:01:09