このページ :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 には 2 つの解決策があります。1 つは 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