我有一个 Web 应用程序,用户可以在其中登录并开始输入ToDoList. 在base.html被包装在一个is_authenticated检查,以便用户无法看到任何东西的应用,直到他们已经登录我在做一些测试用:
登录为 User2
添加一个新的 ToDoListItem
重定向到 DetailView
在这种情况下,URL = http://localhost:8000/to_do_list/to_do_item/72
此时我意识到的DetailView将允许User2看到任何细节ToDoListItem的User1只是通过输入现有pk分为:http://localhost:8000/to_do_list/to_do_item/<int:pk>。
urls.py 包括
path('to_do_item/<int:pk>', views.ToDoListItemDetail.as_view(), name='todo-item-detail'),
视图.py
class ToDoListItemDetail(DetailView):
model = ToDoListItem
todolistitem_detail.html
{% extends 'base.html' %}
{% block content %}
<a href="/">Home</a>
<h1>DetailView for 'ToDoListItem' model</h1>
<p>TaskTitle: '{{ object.title }}'</p>
<p>Complete: '{{ object.is_complete }}'</p>
<p>User: '{{ object.user}}'</p>
{% endblock %}
防止这种情况发生的推荐方法是什么?我正在考虑以下几点:
我可以完全删除 DetailView 并定向到仅返回用户数据的不同 URL(使用类似ToDoListItem.objects.filter(user=request.user))
我可以检查登录用户的名称是否与拥有ToDoListItem.
我可以覆盖get_context_data()DetailView 并在那里检查用户所有权(类似于 1,但在 DetailView 中)
???(还有比上面更好的东西,我还不知道)
有没有办法限制用户在整个应用程序中只能看到他们自己的数据,而无需在每次需要时实现此逻辑?
qq_遁去的一_1
相关分类