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

Django中如何阻止已登录用户访问其他用户的个人资料更新页面

解决方案

你只需要在原视图逻辑中新增一层身份校验,判断当前登录用户是否是要修改的资料所属用户即可,无需修改路由配置。

步骤1:导入依赖模块

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

步骤2:修改视图函数

修改后的完整视图代码如下:

@login_required
def UpdateProfile(request, slug):
    # 替换原有get方法,避免slug不存在时抛出500错误
    user = get_object_or_404(Profile, slug=slug)
    # 新增身份校验:判断要修改的资料是否属于当前登录用户
    if user != request.user.profile:
        # 校验不通过直接返回403禁止访问,也可根据业务需求调整为跳转逻辑
        return HttpResponseForbidden("你无权修改其他用户的资料")
    
    if request.method == "POST":
        form = UpdateProfileForm(request.POST, request.FILES, instance=user)
        if form.is_valid():
            profile_pic = form.cleaned_data['profile_pic']
            form.profile_pic = profile_pic
            form.save()
            messages.success(request,"Data Updated successfully")
            return HttpResponseRedirect(reverse('updateaddress', args=(request.user.profile.slug,)))
        else:
            messages.error(request, "Please check all fields are valid")
            return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    else:
        form = UpdateProfileForm(instance=user)
    context = {
        'user':user,
        'form':form,
    }
    return render(request, "authentication/register/update/profile.html",context)

可选友好交互调整

如果不想返回403页面,可将校验部分替换为跳转逻辑,给用户提示后直接跳转到其本人的资料更新页:

if user != request.user.profile:
    messages.error(request, "你无权修改其他用户的资料")
    return HttpResponseRedirect(reverse('updateprofile', args=(request.user.profile.slug,)))

逻辑说明

原代码仅校验了用户是否处于登录状态,没有校验登录用户和待修改资料的归属关系,新增的校验逻辑完全覆盖了越权访问他人资料更新页的场景,即使用户知道其他用户的资料更新URL也无法访问。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:36:04