Django

Code

Changeset 1440

Show
Ignore:
Timestamp:
11/26/05 01:20:07 (2 years ago)
Author:
adrian
Message:

Fixed #903 -- Added login_url argument to user_passes_test view decorator. Didn't add it to login_required decorator because that would turn login_required into a callable decorator, which would break backwards compatibility.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/views/auth/login.py

    r867 r1440  
    77 
    88REDIRECT_FIELD_NAME = 'next' 
     9LOGIN_URL = '/accounts/login/' 
    910 
    1011def login(request): 
     
    4041        return HttpResponseRedirect(next_page or request.path) 
    4142 
    42 def logout_then_login(request): 
     43def logout_then_login(request, login_url=LOGIN_URL): 
    4344    "Logs out the user if he is logged in. Then redirects to the log-in page." 
    44     return logout(request, '/accounts/login/'
     45    return logout(request, login_url
    4546 
    46 def redirect_to_login(next): 
     47def redirect_to_login(next, login_url=LOGIN_URL): 
    4748    "Redirects the user to the login page, passing the given 'next' page" 
    48     return HttpResponseRedirect('/accounts/login/?%s=%s' % (REDIRECT_FIELD_NAME, next)) 
     49    return HttpResponseRedirect('%s?%s=%s' % (login_url, REDIRECT_FIELD_NAME, next)) 
  • django/trunk/django/views/decorators/auth.py

    r1004 r1440  
    1 def user_passes_test(test_func): 
     1from django.views.auth import login 
     2 
     3def user_passes_test(test_func, login_url=login.LOGIN_URL): 
    24    """ 
    35    Decorator for views that checks that the user passes the given test, 
     
    79    def _dec(view_func): 
    810        def _checklogin(request, *args, **kwargs): 
    9             from django.views.auth.login import redirect_to_login 
    1011            if test_func(request.user): 
    1112                return view_func(request, *args, **kwargs) 
    12             return redirect_to_login(request.path
     13            return login.redirect_to_login(request.path, login_url
    1314        return _checklogin 
    1415    return _dec 
  • django/trunk/docs/authentication.txt

    r1439 r1440  
    315315is not anonymous. 
    316316 
     317**New in the Django development version**: ``user_passes_test()`` takes an 
     318optional ``login_url`` argument, which lets you specify the URL for your login 
     319page (``/accounts/login/`` by default). 
     320 
     321Example in Python 2.3 syntax:: 
     322 
     323    from django.views.decorators.auth import user_passes_test 
     324 
     325    def my_view(request): 
     326        # ... 
     327    my_view = user_passes_test(lambda u: u.has_perm('polls.can_vote'), login_url='/login/')(my_view) 
     328 
     329Example in Python 2.4 syntax:: 
     330 
     331    from django.views.decorators.auth import user_passes_test 
     332 
     333    @user_passes_test(lambda u: u.has_perm('polls.can_vote'), login_url='/login/') 
     334    def my_view(request): 
     335        # ... 
     336 
    317337Limiting access to generic views 
    318338--------------------------------