我正在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_required
、get_queryset
和get_object
的方法_decorator,我可以很容易地确保登录该用户的哪个用户只能看到他的DetailView
配置文件。
但当我使用function-based
视图时,假设pk=1
的Industrial
帐户用户也可以使用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)