Django - 编辑现有记录

Posted

技术标签:

【中文标题】Django - 编辑现有记录【英文标题】:Django - Editing an existing record 【发布时间】:2014-12-28 19:05:31 【问题描述】:

我有一个关于 this answer 的问题,还有一个关于使用 Django 编辑现有模型记录的问题。

如果您有编辑记录的视图

def edit(request, id):
...

恶意用户是否可以更改表单的action 中的id 以编辑他最初访问的编辑页面以外的记录?换句话说,为什么将 id 放在对视图的调用中而不是通过 POST 传递 id 是安全的?

【问题讨论】:

【参考方案1】:

您似乎错过了这部分答案:

@login_required
def edit(request, id=None, template_name='article_edit_template.html'):
    if id:
        article = get_object_or_404(Article, pk=id)
        if article.author != request.user:
            return HttpResponseForbidden()
    else:
        article = Article(author=request.user)

您可以看到我们检查当前登录的用户是否是帖子的作者。如果不是这种情况,我们会返回一个 HttpResponseForbidden。

就像您正确地指出任何用户都可以更改 url 中的 id 并尝试查看不同记录的编辑页面一样,您有责任确保只有正确的用户可以编辑帖子。

【讨论】:

即便如此,这允许用户编辑他的任何文章,即使他来自文章 123 的编辑页面。我认为以某种方式限制用户会是更好的做法从编辑除 123 以外的任何文章,如果这是他首先访问的编辑页面。 我看不出有什么问题。为什么你需要这样的限制?你将如何实施它?一个额外的模型字段?看起来很多余,你有什么收获?

以上是关于Django - 编辑现有记录的主要内容,如果未能解决你的问题,请参考以下文章

ABNewPersonViewController 可以用来编辑现有记录吗?

使用 json 文件向 django 中的数据库添加一些记录

如何在Access中使用子表单时编辑现有记录而不创建新记录?

在 Django Bootstrap Modal 窗口中编辑记录

django admin编辑被外键关联的主表时支持显示字表记录

Django-admin:如何在记录更改列表中显示指向对象信息页面的链接而不是编辑表单?