我对Django相当陌生,我得到了一些关于我的项目(配方应用程序)的反馈,目前我正从我的导师那里得到一些关于防御性编程的反馈。我在Django的应用程序视图中创建了一个删除“函数”,他告诉我重新制作这个函数,这样除了菜谱的作者之外,没有人可以删除所选的菜谱。我已经在我的HTML中包含了这方面的身份验证,但是他告诉我对我的delete视图也要这样做。有没有人能很好地解释我如何能以一种简单的方式做到这一点?
我以前从来没有在这里问过问题,所以如果我为这样的问题提供了正确的信息,请给我反馈。
以下是我今天的删除意见:
def delete_recipe(request, slug):
"""
View for delete recipe
"""
recipe = Recipe.objects.get(slug=slug)
recipe.delete()
return redirect('home')发布于 2022-07-14 12:37:13
我知道最好的描述,你是怎么做的。就在这里:https://docs.djangoproject.com/en/4.0/topics/auth/default/#django.contrib.auth.decorators.permission_required
对于最佳实践,您应该检查用户是否有object_delete_permission。
@permission_required('app_name.delete_reciepe', login_url='/name_of_login_page/')
def delete_recipe(request, slug):
...但这并不是全部:
在此之后,您应该检查这是否是产品的作者:
...
recipe = Recipe.objects.get(slug=slug)
if request.user.pk == recipe.author_pk
recipe.delete()
...对我来说还不清楚,为什么不使用Django-GCBV DeleteView呢?https://docs.djangoproject.com/en/4.0/ref/class-based-views/generic-editing/#deleteview
这个视图给了你所有你需要的,在盒子里。
当然,尝试只在帖子或删除时删除某些内容。
https://stackoverflow.com/questions/72980454
复制相似问题