首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >views中删除函数的防御性编程

views中删除函数的防御性编程
EN

Stack Overflow用户
提问于 2022-07-14 12:23:50
回答 1查看 69关注 0票数 2

我对Django相当陌生,我得到了一些关于我的项目(配方应用程序)的反馈,目前我正从我的导师那里得到一些关于防御性编程的反馈。我在Django的应用程序视图中创建了一个删除“函数”,他告诉我重新制作这个函数,这样除了菜谱的作者之外,没有人可以删除所选的菜谱。我已经在我的HTML中包含了这方面的身份验证,但是他告诉我对我的delete视图也要这样做。有没有人能很好地解释我如何能以一种简单的方式做到这一点?

我以前从来没有在这里问过问题,所以如果我为这样的问题提供了正确的信息,请给我反馈。

以下是我今天的删除意见:

代码语言:javascript
复制
def delete_recipe(request, slug):
    """
    View for delete recipe
    """
    recipe = Recipe.objects.get(slug=slug)
    recipe.delete()
    return redirect('home')
EN

回答 1

Stack Overflow用户

发布于 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

代码语言:javascript
复制
@permission_required('app_name.delete_reciepe', login_url='/name_of_login_page/')
def delete_recipe(request, slug):
    ...

但这并不是全部:

在此之后,您应该检查这是否是产品的作者:

代码语言:javascript
复制
...
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

这个视图给了你所有你需要的,在盒子里。

当然,尝试只在帖子或删除时删除某些内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72980454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档