From c067a2b68fe2701608b34ac4a538e1f9dba0e9f2 Mon Sep 17 00:00:00 2001 From: sreehari1997 Date: Tue, 12 Oct 2021 13:39:29 +0530 Subject: [PATCH] [4.0.x] Fixed #33172 -- Added example of modifying upload handlers on the fly for CBVs. Backport of e2f778d57947d168a875159e6df075255eea4bbc from main --- docs/topics/http/file-uploads.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/topics/http/file-uploads.txt b/docs/topics/http/file-uploads.txt index ca272d785a..c946662bba 100644 --- a/docs/topics/http/file-uploads.txt +++ b/docs/topics/http/file-uploads.txt @@ -271,3 +271,24 @@ list:: @csrf_protect def _upload_file_view(request): ... # Process request + + If you are using a class-based view, you will need to use + :func:`~django.views.decorators.csrf.csrf_exempt` on its + :meth:`~django.views.generic.base.View.dispatch` method and + :func:`~django.views.decorators.csrf.csrf_protect` on the method that + actually processes the request. Example code:: + + from django.utils.decorators import method_decorator + from django.views import View + from django.views.decorators.csrf import csrf_exempt, csrf_protect + + @method_decorator(csrf_exempt, name='dispatch') + class UploadFileView(View): + + def setup(self, request, *args, **kwargs): + request.upload_handlers.insert(0, ProgressBarUploadHandler(request)) + super().setup(request, *args, **kwargs) + + @method_decorator(csrf_protect) + def post(self, request, *args, **kwargs): + ... # Process request