logins.txt
+--
Django - book database with users, logins, redirects
  The machinery is provided in django.contrib.auth, but is unobvious
  
   https://docs.djangoproject.com/en/1.3/topics/auth/
   http://www.djangobook.com/en/2.0/chapter14/
  Starting from a simple app without users or authorization
   (for example, starting from booksite.py, how to make bookshop.py):
  1. In settings.py INSTALLED_APPS uncomment auth, sessions,
      contenttypes, then: python manage.py syncdb 
  2. Authorize users in the database auth_user table, for example:
      user = User.objects.create_user('jon', 'jon@uw.edu', 'mypasswd')
  3. In your top-level urls.py add these three lines at the appropriate
      locations: 
      from django.contrib.auth.views import login, logout
        ...  
        url(r'^accounts/login/$', login),
        url(r'^accounts/logout/$', logout), 
        ...
  4. In views.py, decorate pertinent views with @login_required.  This
      will redirect to the login page when needed.  You do NOT have to
      add any other code in views.py to support login/logout, that is already
      provided by django.contrib.auth.views.login,logout referenced in
      urls.py
  5. In your templates directory, add a registration/ directory
      containing the forms login.html and logged_out.html.  You can
      copy a sample login.html from the references linked above.
      Your login.html must include {% csrf_token %} for security.
      
  6. In your templates, add Logout links where appropriate:
      Logout
  7. Add a Login link to /accounts/login where appropriate.  It is not
      needed on pages whose views are decorated with @login_required,
      but it is often helpful to put a Login link on the
      logged_out.html page.  The Login link should include a
      next?... query string to indicate the page to show after a
      successful login.  The bookshop sample uses this Login link:
       Login
+---
HTTP Redirects - in general
 Browser sends HTTP GET request with URL1
 Server replies HTTP reponse code 302, with header Location: URL2
 Browser sends HTTP GET request with URL2
 Can program redirects in web applications for control and navigation 
+--
HTTP Redirects - control and navigation in bookshop
 @login_required on some views redirects to login page
 then successful login redirects back to view originally requested
...
> [12/Mar/2012 16:00:02] "GET /books/ HTTP/1.1" 302 0
  [12/Mar/2012 16:00:03] "GET /accounts/login/?next=/books/ HTTP/1.1" 200 564
> [12/Mar/2012 16:00:19] "POST /accounts/login/?next=/books/ HTTP/1.1" 302 0
  [12/Mar/2012 16:00:19] "GET /books/ HTTP/1.1" 200 868
  [12/Mar/2012 16:00:52] "GET /books/detail/978-1904811848 HTTP/1.1" 200 688
  [12/Mar/2012 16:00:59] "GET /books/ HTTP/1.1" 200 868
  [12/Mar/2012 16:01:05] "GET /accounts/logout/ HTTP/1.1" 200 205
 Looks convoluted to this old-school programmer
 Web programming involves intricate division of labor between
  your code, framework, server, browser
   - must understand HTTP protocol (what's a redirect?)