django - 如何为登录用户而不是每个人显示删除/编辑链接?
问题描述
我知道如何在不同的视图中删除和编辑帖子,但是在一个页面中有一个帖子和多个答案的帖子,我将如何链接以编辑和删除所有这些不同用户的视图?
或者 is_authenticated 仅适用于一个用户,所以他们只能查看自己的帖子删除/编辑链接?
解决方案
以最简单的形式,您可以在模板中执行此操作,
{% if request.user.is_authenticated %}
Show Edit Link
Show Delete Link
{% endif %}
但是,您只想在当前登录用户的答案上显示编辑/删除链接。
你可以这样做:
{% if request.user.is_authenticated and request.user == answer.creator %}
Show Edit Link
Show Delete Link
{% endif %}
最后,您还需要在 Edit 和 Delete 视图中进行检查,以确保用户实际上是答案的创建者,否则任何人都可以编辑/删除任何帖子:
def edit_view(request, post_id):
if request.user.is_authenticated() and request.user == post.creator:
# edit post
...
要在基于通用类的视图中做到这一点:
from django.core.exceptions import PermissionDenied
class PostDeleteView(DeleteView):
def get(self, request, *args, **kwargs):
post = self.get_object()
if request.user != post.creator:
# raise a 403 Forbidden error
raise PermissionDenied()
return super().get(request, *args, **kwargs)
推荐阅读
- android - 为什么 BottomSheetBehavior.settleToStatePendingLayout 必须在调用 setToState 之前判断这些条件
- generics - 想要一个具有泛型类型的方形结构,然后通过 impl 找到区域?
- kubernetes - kubernetes jaeger deploy 返回未知字段“模板”
- python - 数据库查询不适用于 Django/Python 项目的 Heroku 部署
- javascript - 如何制作弹出和弹出动画
- r - r data.table - 比较具有相同后缀的列
- sql - Redshift 中的过程返回“SELECT 查询没有结果数据的目的地”错误
- r - 运行 Shiny 应用程序脚本以进行迷你元分析时遇到问题
- mysql - Amazon RDS 在 Reader 实例和 Writer 实例之间切换服务器
- python - 根据其键值从列表中删除多个项目(字典)