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 窗口中编辑记录