Restrict image access

Correct. This is why I refer to this as a “production-quality deployment”. (There are situations where “runserver” may well be the right choice - and I happen to do a fair amount of work in that space. But they’re not what I would call a true deployment, even though those sites are in production and being used.)

Yes to “whitenoise”. I know almost nothing about the other two (“downloadview” and “protected-media”). It appears that they may be designed to work both with a webserver using the proper header, or to serve the files directly. (My comment from 2021 about never having used either one is still accurate.)

Short answer: CGI with Django? No.

Long answer: See the thread at FastCGI + Django
and the various resources linked within it, primarily #2407 (CGI Support for django) – Django.