gpt4 book ai didi

django - 在 Django 中删除对象

转载 作者:行者123 更新时间:2023-12-02 02:45:34 26 4
gpt4 key购买 nike

在一个迷你博客应用程序中,我想创建一个删除功能,以便博客所有者可以删除他的条目(并且仅删除他的条目)。我想唯一的方法就是使用表单。虽然我的删除代码看起来清晰正确,但它不起作用。我的代码:

def delete_new(request,id):
u = New.objects.get(pk=id).delete()
if request.method == 'POST':
form = DeleteNewForm(request.POST)
form.u.delete()
form.save()
return render_to_response('news/deleteNew.html', {
'form': form,
},
context_instance=RequestContext(request))

在模板中:

<a href='/news/delete_new/{{object.id}}/'> Delete</a> <br /> 

这是正确的方法吗?我的意思是,为此创建一个表格?此外,获取与删除链接关联的博客文章的唯一方法是将 id 作为参数。这样对吗?我的意思是,也许任何用户都可以在 url 中输入另一个 id,然后删除另一个条目(最终不是他的条目)

最佳答案

您需要使用表单,否则您很容易受到 CSRF attacks 的攻击。在检查请求是 GET 还是 POST 之前,您还会删除模型。

创建一个简单的ModelForm:

from django import forms

from .models import New

class DeleteNewForm(forms.ModelForm):
class Meta:
model = New
fields = []

在同一个 Django 应用程序的views.py 中:

from django.shortcuts import render, get_object_or_404

from .forms import DeleteNewForm
from .models import New

def delete_new(request, new_id):
new_to_delete = get_object_or_404(New, id=new_id)
#+some code to check if this object belongs to the logged in user

if request.method == 'POST':
form = DeleteNewForm(request.POST, instance=new_to_delete)

if form.is_valid(): # checks CSRF
new_to_delete.delete()
return HttpResponseRedirect("/") # wherever to go after deleting

else:
form = DeleteNewForm(instance=new_to_delete)

template_vars = {'form': form}
return render(request, 'news/deleteNew.html', template_vars)

关于django - 在 Django 中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3124658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com