使用Django中基于函数的视图阻止不需要的用户访问其他用户的配置文件数据



我正在Django中处理一些基于函数的视图。我有一个名为industry_required的自定义构建装饰器,它允许通过验证用户是否通过了Industrial帐户的身份验证来进行传递。

我在views.py中有一些函数,在urls.py中有它们特定的URL。类似:

urls.py:中

path('industryDetails/', views.industryDetails.as_view(), name='industryDetails'),
path('industry_create_report/<int:pk>/', views.industry_create_report, name='industry_create_report'),

views.py:中

@method_decorator(industry_required, name='dispatch')
class industryDetails(DetailView):
model = Industry
template_name = 'app/industryDetails.html'
def get_queryset(self):
return Industry.objects.filter(user=self.request.user)
def get_object(self):
return get_object_or_404(Industry, user=self.request.user)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['inserted_text'] = "inserted text from EmployeeDetails of views.py"
context['employee_table'] = self.object.employee_set.all()
return context


def industry_create_report(request):
industry_create_report_dict = {

}
#bla bla....
return render(request, 'app/industry_create_report.html', industry_create_report_dict)

现在我的问题是,当我使用DetailView时,通过使用名为industry_requiredget_querysetget_object的方法_decorator,我可以很容易地确保登录该用户的哪个用户只能看到他的DetailView配置文件。

但当我使用function-based视图时,假设pk=1Industrial帐户用户也可以使用URL模式(industry_create_report/2/(查看pk=2的数据,这是不可取的。

我该怎么修?

在基于函数的视图中,您需要使用与industryDetails.get_queryset中指定的过滤器类似的过滤器来获取行业。

def function_based_view(request, pk):
industry = get_object_or_404(Industry.objects.filter(user=self.request.user), pk=pk)

相关内容

最新更新