=== modified file 'django/contrib/auth/__init__.py'
      
        
          
        
        
          
            |  |  |  | 
        
        
          
            |  | 1 | from django.conf import settings | 
        
        
          
            | 1 | 2 | from django.core.exceptions import ImproperlyConfigured | 
          
            | 2 | 3 |  | 
          
            | 3 | 4 | SESSION_KEY = '_auth_user_id' | 
          
            | 4 | 5 | BACKEND_SESSION_KEY = '_auth_user_backend' | 
        
        
          
            | 5 |  | LOGIN_URL = '/accounts/login/' | 
          
            |  | 6 | LOGIN_URL = getattr(settings, 'LOGIN_URL', '/accounts/login/') | 
          
            |  | 7 | ACCOUNT_URL = getattr(settings, 'ACCOUNT_URL', '/accounts/profile/') | 
        
        
          
            | 6 | 8 | REDIRECT_FIELD_NAME = 'next' | 
          
            | 7 | 9 |  | 
          
            | 8 | 10 | def load_backend(path): | 
        
      
    
    
      
      
=== modified file 'django/contrib/auth/views.py'
      
        
          
        
        
          
            |  |  |  | 
        
        
          
            | 6 | 6 | from django.contrib.sites.models import Site | 
          
            | 7 | 7 | from django.http import HttpResponseRedirect | 
          
            | 8 | 8 | from django.contrib.auth.decorators import login_required | 
        
        
          
            | 9 |  | from django.contrib.auth import LOGIN_URL, REDIRECT_FIELD_NAME | 
          
            |  | 9 | from django.contrib.auth import LOGIN_URL, ACCOUNT_URL, REDIRECT_FIELD_NAME | 
        
        
          
            | 10 | 10 |  | 
          
            | 11 | 11 | def login(request, template_name='registration/login.html'): | 
          
            | 12 | 12 | "Displays the login form and handles the login action." | 
        
        
          
            | … | … |  | 
        
        
          
            | 17 | 17 | if not errors: | 
          
            | 18 | 18 | # Light security check -- make sure redirect_to isn't garbage. | 
          
            | 19 | 19 | if not redirect_to or '://' in redirect_to or ' ' in redirect_to: | 
        
        
          
            | 20 |  | redirect_to = '/accounts/profile/' | 
          
            |  | 20 | redirect_to = ACCOUNT_URL | 
        
        
          
            | 21 | 21 | from django.contrib.auth import login | 
          
            | 22 | 22 | login(request, manipulator.get_user()) | 
          
            | 23 | 23 | request.session.delete_test_cookie() | 
        
      
    
    
      
      
=== modified file 'docs/authentication.txt'
      
        
          
        
        
          
            |  |  |  | 
        
        
          
            | 377 | 377 |  | 
          
            | 378 | 378 | ``login_required`` does the following: | 
          
            | 379 | 379 |  | 
        
        
          
            | 380 |  | * If the user isn't logged in, redirect to ``/accounts/login/``, passing | 
          
            | 381 |  | the current absolute URL in the query string as ``next``. For example: | 
          
            |  | 380 | * If the user isn't logged in, redirect to ``"settings.LOGIN_URL"`` | 
          
            |  | 381 | (``"/accounts/login/"`` by default), passing the current absolute URL | 
          
            |  | 382 | in the query string as ``next``. For example: | 
        
        
          
            | 382 | 383 | ``/accounts/login/?next=/polls/3/``. | 
          
            | 383 | 384 | * If the user is logged in, execute the view normally. The view code is | 
          
            | 384 | 385 | free to assume the user is logged in. | 
          
            | 385 | 386 |  | 
        
        
          
            | 386 |  | Note that you'll need to map the appropriate Django view to `` /accounts/login/``. | 
          
            | 387 |  | To do this, add the following line to your URLconf:: | 
          
            |  | 387 | Note that you'll need to map the appropriate Django view to ``"settings.LOGIN_URL"``. | 
          
            |  | 388 | For example, using the defaults, add the following line to your URLconf:: | 
        
        
          
            | 388 | 389 |  | 
          
            | 389 | 390 | (r'^accounts/login/$', 'django.contrib.auth.views.login'), | 
          
            | 390 | 391 |  | 
        
        
          
            | … | … |  | 
        
        
          
            | 395 | 396 |  | 
          
            | 396 | 397 | * If called via ``POST``, it tries to log the user in. If login is | 
          
            | 397 | 398 | successful, the view redirects to the URL specified in ``next``. If | 
        
        
          
            | 398 |  | ``next`` isn't provided, it redirects to `` /accounts/profile/`` (which is | 
          
            | 399 |  | currently hard-coded). If login isn't successful, it redisplays the login | 
          
            |  | 399 | ``next`` isn't provided, it redirects to ``"settings.ACCOUNT_URL"`` which | 
          
            |  | 400 | defaults to ``/accounts/profile/``. If login isn't successful, it redisplays the login | 
        
        
          
            | 400 | 401 | form. | 
          
            | 401 | 402 |  | 
          
            | 402 | 403 | It's your responsibility to provide the login form in a template called | 
        
      
    
    
      
      
=== modified file 'docs/settings.txt'
      
        
          
        
        
          
            |  |  |  | 
        
        
          
            | 166 | 166 | 'news.Story': lambda o: "/stories/%s/%s/" % (o.pub_year, o.slug), | 
          
            | 167 | 167 | } | 
          
            | 168 | 168 |  | 
        
        
          
            |  | 169 | ACCOUNT_URL | 
          
            |  | 170 | ------------- | 
          
            |  | 171 |  | 
          
            |  | 172 | Default: ``'/accounts/profile/'`` | 
          
            |  | 173 |  | 
          
            |  | 174 | The URL where requests are redirected after login when the ``"contrib.auth.login"`` view | 
          
            |  | 175 | gets no ``next`` parameter. | 
          
            |  | 176 | i.e.: When the `@login_required`_ decorator is called | 
          
            |  | 177 |  | 
        
        
          
            | 169 | 178 | ADMIN_FOR | 
          
            | 170 | 179 | --------- | 
          
            | 171 | 180 |  | 
        
        
          
            | … | … |  | 
        
        
          
            | 533 | 542 | you'll have to remember to wrap the languages in the *real* ``gettext()`` in | 
          
            | 534 | 543 | any code that uses ``LANGUAGES`` at runtime. | 
          
            | 535 | 544 |  | 
        
        
          
            |  | 545 | LOGIN_URL | 
          
            |  | 546 | ------------- | 
          
            |  | 547 |  | 
          
            |  | 548 | Default: ``'/accounts/login/'`` | 
          
            |  | 549 |  | 
          
            |  | 550 | The URL where requests are redirected for login, specially when using the | 
          
            |  | 551 | `@login_required`_ decorator. | 
          
            |  | 552 |  | 
        
        
          
            | 536 | 553 | MANAGERS | 
          
            | 537 | 554 | -------- | 
          
            | 538 | 555 |  | 
        
        
          
            | … | … |  | 
        
        
          
            | 967 | 984 |  | 
          
            | 968 | 985 | It boils down to this: Use exactly one of either ``configure()`` or | 
          
            | 969 | 986 | ``DJANGO_SETTINGS_MODULE``. Not both, and not neither. | 
        
        
          
            |  | 987 |  | 
          
            |  | 988 | .. _@login_required: http://www.djangoproject.com/documentation/authentication/#the-login-required-decorator |