在 Django 中洗掉物件的最佳做法是什么?使用簡單的“a tag”鏈接到視圖,如下所示:
def deleteStudent(request,id):
student = get_object_or_404(Student, id = id)
student.delete()
return redirect('/')
或使用 post 方法:
<form method="POST">
{% csrf_token %}
Are you want to delete this item ?
<input type="submit" value="Yes" />
<a href="/">Cancel </a>
</form>
在意見中:
def deleteStudent(request, id):
student = get_object_or_404(Student, id = id)
if request.method =="POST":
student.delete()
return redirect('/')
return render(request, "delete_view.html")
我在課程中看到人們使用這兩種方法(這是示例代碼,我沒有測驗它或保護視圖)。那么如果我們可以用“POST”方法洗掉物件,那我能在求職面試中說“POST方法也可以用來洗掉物件”嗎?感謝所有的答案。
uj5u.com熱心網友回復:
前者違反了 HTTP 標準。正如HTTP 規范 [w3.org] 的安全方法標準所說:
特別是,已經建立了約定,即 GET 和 HEAD 方法不應具有采取除檢索之外的操作的意義。這些方法應該被認為是“安全的”。
因此,您不能讓 GET 請求洗掉專案:像 Google 機器人這樣的抓取工具可能會意外觸發此視圖,從而洗掉資料。
如果要洗掉專案,通常通過 DELETE 請求或 POST 請求來執行此操作。這也是[Django-doc]的實作方式:它將洗掉 DELETE 或 POST 請求的物件。這個想法是,對于 GET 請求,您可以呈現一個模板,例如,詢問您是否確定要洗掉該專案,然后在用戶確認時發出 POST(或 DELETE)請求。DeleteView
通常,視圖還會檢查用戶是否被授權這樣做:例如,如果僅允許物件的“所有者”洗掉此類專案,則視圖應對此進行驗證。
我在課程中看到人們使用這兩種方法。
第一個不是一個好主意,并且違反了 HTTP 標準。任何使用它的課程都會帶來安全風險。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/451331.html
標籤:django
上一篇:Djangoi18n多行翻譯
