用户可以从URL手动编辑另一个用户视图

2024-09-26 22:08:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚注意到,一个用户可以通过更改URL中的其他用户pk或用户名(作为slug)来手动访问另一个用户更新概要视图。 比如说

http://127.0.0.1:8000/account/dashboard/18/updateprofile

假设是用户更新配置文件url,如果该用户将pk更改为19并进行编辑,则将编辑具有pk 19配置文件的用户,这是错误还是我方的错误?多谢各位

我在这里的看法

class ProfilepdateView(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
    login_url = 'userlogin'
    fields = ('age', 'location')
    model = UserProfile
    template_name = 'account/updateprofile.html'
    success_message = "Your profile was successfully updated"

网址

path('account/dashboard/<int:pk>/updateprofile', views.ProfilepdateView.as_view(), name="updateprofile"),

Tags: 用户nameurl编辑配置文件错误account手动
3条回答

谢谢我所有能干的老板和大师们,这就是我为解决问题而添加的观点

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

最后的观点是这样的

class ProfilepdateView(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
    login_url = 'userlogin'
    fields = ('age', 'location')
    model = UserProfile
    template_name = 'account/updateprofile.html'
    success_message = "Your profile was successfully updated"

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

这取决于你控制谁能做什么,在哪里-Django猜不到这一点。这里有两种解决方案:

1/保持url不变,但检查是否允许当前用户(request.user)编辑此配置文件:

def update_profile(request, profile_id):
    # assume that profile as a onetone to User
    profile = get_object_or_404(pk=profile_id)
    if request.user != profile.user:
        return HttpResponseForbidden()
    # your code here

2/从url中删除配置文件id,并使用request.user获取当前用户的配置文件

def update_profile(request, profile_id):
    # assume that profile as a onetone to User
    profile = request.user.get_profile()
    # your code here

这样,其他用户仍然可以访问其他用户页面,但无法更新它。如果最初只希望概要文件的所有者能够访问更新页面,则可以限制在模板中查看

    {% if object.user == user %} Show Page Content {% endif %}

或者就在眼前

相关问题 更多 >

    热门问题