我想能够检查,如果用户访问一个页面是一个特定的用户。你知道吗
例如,当用户访问我博客应用程序上的“编辑文章”页面时,我希望确保该用户是文章的作者。你知道吗
当前,我检查访问“/Blog/Edit//”的用户是否具有blog.change\u文章许可。你知道吗
但是,如果第二个用户(也拥有该权限)要输入URL来更改其他人的帖子,他们将通过该权限检查并能够编辑其他人的帖子。你知道吗
我想要的是一个@user\u passes\u test函数,它根据post的author属性检查访问视图的用户对象。你知道吗
#/Blog/urls.py
urlpatterns = [
...
path('Edit/<int:pk>', views.BlogEdit, name='BlogEdit'),
...
]
#/Blog/views.py
@permission_required('blog.change_post', login_url='/Portal/login')
def BlogEdit(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
form = PostForm(request.POST, instance=post)
if form.is_valid():
post = form.save(commit=False)
post.save()
return redirect('/Blog', pk=post.pk)
else:
form = PostForm(instance=post)
return render(request, 'Blog/Edit.html', {'form': form})
在基于类的视图中,将
get_queryset
方法更改为按当前用户筛选。你知道吗您可以向
get_object_or_404
添加额外的筛选器:这里
author
是从Post
到用户模型的假设ForeignKey
。可能名字不一样,但想法还是一样的。你知道吗这意味着如果
pk
是Blog
的pk
,而request.user
不是author
,那么我们将得到404响应。你知道吗这里过滤的优点是,我们使用单个查询进行过滤。我们不会(延迟地)加载
author
来检查它是否与登录的用户相同。你知道吗我最终从This Post中找到了答案。urbanspaceman的建议适用于基于类的视图,但对于基于函数的视图,您可以执行以下操作:
相关问题 更多 >
编程相关推荐