title: Basic Django - How do view wrappers receive the request, keyword and positional arguments?
body: <p>In <a href="http://www.djangobook.com/en/2.0/chapter08/" rel="nofollow noreferrer">chapter 8</a> of the <a href="http://www.djangobook.com/en/2.0/chapter08/" rel="nofollow noreferrer">Django book</a> there is an example showing a fundamental view wrap method, which receives another view method passed in from any single arbitrary URLconf:</p>
  
  <pre><code>def requires_login(view):
      def new_view(request, *args, **kwargs):
          if not request.user.is_authenticated():
              return HttpResponseRedirect('/accounts/login/')
          return view(request, *args, **kwargs)
      return new_view
  </code></pre>
  
  <p>I follow most of the logic here, but what I'm not understanding is how the nested <code>new_view</code> definition is receiving the request, *args and **kwargs as it's not being explicitly passed into the <code>requires_login</code> definition. </p>
  
  <p>How exactly is the <code>new_view</code> definition receiving these arguments?</p>