2014-11-01 134 views
1

我有一個關於this answer的問題,關於使用Django編輯現有模型記錄的問題。Django - 編輯現有記錄

如果你有一個視圖編輯時感覺就像

def edit(request, id): 
... 

記錄可能惡意用戶改變了形式的actionid編輯比其編輯頁面,他最初去了另外一個記錄?換句話說,爲什麼把id放在視圖的調用中是安全的,而不是通過POST來傳遞id?

回答

0

你似乎已經錯過了答案,這部分:

@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。

就像你正確地說明任何用戶可以更改網址中的ID並嘗試查看不同記錄的編輯頁面,確保只有正確的用戶才能編輯帖子是你的責任。

+0

即使如此,這允許用戶編輯他的任何文章,即使他來自文章123的編輯頁面。我會認爲這會更好的做法,以某種方式限制用戶編輯任何其他文章如果這是他首先進入編輯頁面的那個,那麼這個數字就會比123多。 – Ben 2014-11-01 19:15:23

+1

我沒有看到那個問題。爲什麼你需要這樣的限制?你將如何去實施它?一個額外的模型領域?看起來相當多餘,你會得到什麼? – 2014-11-01 20:34:01