我有这个页面:8000/edit/6/,它显示了一个更新令人兴奋的模型的表单,我以 X 身份登录,如果我以 Y 身份登录并尝试打开该页面,我可以看到它并更新。所以这无疑是一个大错误和危险。
这是我的查看代码
class VideoUpdate(UpdateView):
form_class = VideoForm
model = Video
template_name = 'videos/video_update.html'
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(VideoUpdate, self).dispatch(*args, **kwargs)
def form_valid(self, form):
messages.info(self.request, _('Event is updated successfully'))
return super(VideoUpdate, self).form_valid(form)
有没有办法用用户 ID 检查模型对象 ID。新手的一个简单问题
解决方案:
实际上,views.py 中有两种对我有用的解决方案,一种是使用 get_queryset 方法
def get_queryset(self):
base_qs = super(VideoUpdate, self).get_queryset()
return base_qs.filter(user=self.request.user.get_profile)
或使用 get_object 方法
def get_object(self):
video = get_object_or_404(Video, pk=self.kwargs['pk'])
if video.user != self.request.user.get_profile():
raise Http404
return video