Django论坛项目如何添加DeleteView与UpdateView功能?
Django论坛添加UpdateView与DeleteView功能实现方案
1. 导入所需依赖
在你的views.py文件头部引入需要用到的类和方法:
from django.views.generic.edit import UpdateView, DeleteView from django.urls import reverse_lazy from django.utils.decorators import method_decorator from django.http import HttpResponseForbidden
2. 编写帖子编辑视图
该视图仅允许帖子作者编辑内容,编辑成功后自动跳转回帖子详情页:
@method_decorator(check_login, name='dispatch') class TopicUpdateView(UpdateView): model = Topic # 指定允许用户编辑的字段 fields = ['name', 'content'] template_name = 'topic_edit.html' # 编辑成功后跳转地址,适配你原有的GET参数路由逻辑可改为 return f'/topic/?id={self.object.id}' def get_success_url(self): return reverse_lazy('topic_detail', kwargs={'pk': self.object.pk}) # 权限校验:仅帖子作者可执行编辑操作 def get_object(self, queryset=None): obj = super().get_object(queryset) if obj.user.username != self.request.session.get('name'): return HttpResponseForbidden("你没有权限编辑该帖子") return obj
3. 编写帖子删除视图
该视图仅允许帖子作者删除内容,删除成功后自动跳转回所属学科板块页:
@method_decorator(check_login, name='dispatch') class TopicDeleteView(DeleteView): model = Topic # 删除成功后跳转地址,适配你原有逻辑可改为 return f'/public/{self.object.subject_id}/' def get_success_url(self): return reverse_lazy('public_page', kwargs={'pid': self.object.subject_id}) # 权限校验:仅帖子作者可执行删除操作 def get_object(self, queryset=None): obj = super().get_object(queryset) if obj.user.username != self.request.session.get('name'): return HttpResponseForbidden("你没有权限删除该帖子") return obj
4. 配置URL路由
在项目的urls.py中添加对应的路由规则:
urlpatterns = [ # 保留你原有其他路由 path('topic/<int:pk>/update/', TopicUpdateView.as_view(), name='topic_update'), path('topic/<int:pk>/delete/', TopicDeleteView.as_view(), name='topic_delete'), ]
5. 前端模板调整
编辑页模板(新增topic_edit.html)
提供编辑表单供用户修改内容:
<form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">保存修改</button> </form>
帖子详情页新增操作按钮
在topic.html中添加仅作者可见的编辑、删除入口:
{% if username == content.topic.user.username %} <a href="{% url 'topic_update' content.topic.id %}">编辑帖子</a> <form action="{% url 'topic_delete' content.topic.id %}" method="post" style="display:inline;"> {% csrf_token %} <button type="submit" onclick="return confirm('确认删除该帖子?删除后无法恢复')">删除帖子</button> </form> {% endif %}
内容的提问来源于stack exchange,提问作者DDT19F1127 MUHAMMAD DHAIFULLAH
相关产品推荐
相关产品推荐

