mirror of
				https://github.com/django/django.git
				synced 2025-11-04 05:35:37 +00:00 
			
		
		
		
	Removed the this_is_the_login_form hack
Refs #21911. Now that we have a more traditional login form, we don't need any more a special field telling us we are dealing with the login form.
This commit is contained in:
		
							parent
							
								
									be0ad62994
								
							
						
					
					
						commit
						343dfff133
					
				
					 5 changed files with 22 additions and 42 deletions
				
			
		| 
						 | 
				
			
			@ -4,30 +4,23 @@ from django import forms
 | 
			
		|||
 | 
			
		||||
from django.contrib.auth import authenticate
 | 
			
		||||
from django.contrib.auth.forms import AuthenticationForm
 | 
			
		||||
from django.utils.translation import ugettext_lazy
 | 
			
		||||
 | 
			
		||||
ERROR_MESSAGE = ugettext_lazy("Please enter the correct %(username)s and password "
 | 
			
		||||
        "for a staff account. Note that both fields may be case-sensitive.")
 | 
			
		||||
from django.utils.translation import ugettext_lazy as _
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class AdminAuthenticationForm(AuthenticationForm):
 | 
			
		||||
    """
 | 
			
		||||
    A custom authentication form used in the admin app.
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    this_is_the_login_form = forms.BooleanField(widget=forms.HiddenInput, initial=1,
 | 
			
		||||
        error_messages={'required': ugettext_lazy("Please log in again, because your session has expired.")})
 | 
			
		||||
    error_messages = {
 | 
			
		||||
        'invalid_login': _("Please enter the correct %(username)s and password "
 | 
			
		||||
                           "for a staff account. Note that both fields may be "
 | 
			
		||||
                           "case-sensitive."),
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    def clean(self):
 | 
			
		||||
        username = self.cleaned_data.get('username')
 | 
			
		||||
        password = self.cleaned_data.get('password')
 | 
			
		||||
        message = ERROR_MESSAGE
 | 
			
		||||
        params = {'username': self.username_field.verbose_name}
 | 
			
		||||
 | 
			
		||||
        if username and password:
 | 
			
		||||
            self.user_cache = authenticate(username=username, password=password)
 | 
			
		||||
            if self.user_cache is None:
 | 
			
		||||
                raise forms.ValidationError(message, code='invalid', params=params)
 | 
			
		||||
            elif not self.user_cache.is_active or not self.user_cache.is_staff:
 | 
			
		||||
                raise forms.ValidationError(message, code='invalid', params=params)
 | 
			
		||||
        return self.cleaned_data
 | 
			
		||||
    def confirm_login_allowed(self, user):
 | 
			
		||||
        if not user.is_active or not user.is_staff:
 | 
			
		||||
            raise forms.ValidationError(
 | 
			
		||||
                self.error_messages['invalid_login'],
 | 
			
		||||
                code='invalid_login',
 | 
			
		||||
                params={'username': self.username_field.verbose_name}
 | 
			
		||||
            )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,8 +15,6 @@ from django.utils.translation import ugettext_lazy, ugettext as _
 | 
			
		|||
from django.views.decorators.cache import never_cache
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
 | 
			
		||||
LOGIN_FORM_KEY = 'this_is_the_login_form'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class AlreadyRegistered(Exception):
 | 
			
		||||
    pass
 | 
			
		||||
| 
						 | 
				
			
			@ -193,8 +191,6 @@ class AdminSite(object):
 | 
			
		|||
        cacheable=True.
 | 
			
		||||
        """
 | 
			
		||||
        def inner(request, *args, **kwargs):
 | 
			
		||||
            if LOGIN_FORM_KEY in request.POST and request.user.is_authenticated():
 | 
			
		||||
                auth_logout(request)
 | 
			
		||||
            if not self.has_permission(request):
 | 
			
		||||
                if request.path == reverse('admin:logout', current_app=self.name):
 | 
			
		||||
                    index_path = reverse('admin:index', current_app=self.name)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,14 +12,14 @@
 | 
			
		|||
{% block breadcrumbs %}{% endblock %}
 | 
			
		||||
 | 
			
		||||
{% block content %}
 | 
			
		||||
{% if form.errors and not form.non_field_errors and not form.this_is_the_login_form.errors %}
 | 
			
		||||
{% if form.errors and not form.non_field_errors %}
 | 
			
		||||
<p class="errornote">
 | 
			
		||||
{% if form.errors.items|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %}
 | 
			
		||||
</p>
 | 
			
		||||
{% endif %}
 | 
			
		||||
 | 
			
		||||
{% if form.non_field_errors or form.this_is_the_login_form.errors %}
 | 
			
		||||
{% for error in form.non_field_errors|add:form.this_is_the_login_form.errors %}
 | 
			
		||||
{% if form.non_field_errors %}
 | 
			
		||||
{% for error in form.non_field_errors %}
 | 
			
		||||
<p class="errornote">
 | 
			
		||||
    {{ error }}
 | 
			
		||||
</p>
 | 
			
		||||
| 
						 | 
				
			
			@ -29,13 +29,12 @@
 | 
			
		|||
<div id="content-main">
 | 
			
		||||
<form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %}
 | 
			
		||||
  <div class="form-row">
 | 
			
		||||
    {% if not form.this_is_the_login_form.errors %}{{ form.username.errors }}{% endif %}
 | 
			
		||||
    {{ form.username.errors }}
 | 
			
		||||
    <label for="id_username" class="required">{{ form.username.label }}:</label> {{ form.username }}
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class="form-row">
 | 
			
		||||
    {% if not form.this_is_the_login_form.errors %}{{ form.password.errors }}{% endif %}
 | 
			
		||||
    {{ form.password.errors }}
 | 
			
		||||
    <label for="id_password" class="required">{% trans 'Password:' %}</label> {{ form.password }}
 | 
			
		||||
    <input type="hidden" name="this_is_the_login_form" value="1" />
 | 
			
		||||
    <input type="hidden" name="next" value="{{ next }}" />
 | 
			
		||||
  </div>
 | 
			
		||||
  {% url 'admin_password_reset' as password_reset_url %}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -870,6 +870,10 @@ where any unauthorized request to an admin page will be redirected (by HTTP
 | 
			
		|||
status code 302) to the login page, with the ``next`` parameter set to the
 | 
			
		||||
referring path. The user will be redirected there after a successful login.
 | 
			
		||||
 | 
			
		||||
Note also that the admin login form has been updated to not contain the
 | 
			
		||||
``this_is_the_login_form`` field (now unused) and the ``ValidationError`` code
 | 
			
		||||
has been set to the more regular ``invalid_login`` key.
 | 
			
		||||
 | 
			
		||||
Miscellaneous
 | 
			
		||||
~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,7 +17,6 @@ from django.contrib.auth import get_permission_codename
 | 
			
		|||
from django.contrib.admin import ModelAdmin
 | 
			
		||||
from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME
 | 
			
		||||
from django.contrib.admin.models import LogEntry, DELETION
 | 
			
		||||
from django.contrib.admin.sites import LOGIN_FORM_KEY
 | 
			
		||||
from django.contrib.admin.utils import quote
 | 
			
		||||
from django.contrib.admin.validation import ModelAdminValidator
 | 
			
		||||
from django.contrib.admin.views.main import IS_POPUP_VAR
 | 
			
		||||
| 
						 | 
				
			
			@ -769,7 +768,6 @@ class CustomModelAdminTest(AdminViewBasicTestCase):
 | 
			
		|||
        self.assertEqual(response.status_code, 200)
 | 
			
		||||
        login = self.client.post('/test_admin/admin2/login/', {
 | 
			
		||||
            REDIRECT_FIELD_NAME: '/test_admin/admin2/',
 | 
			
		||||
            LOGIN_FORM_KEY: 1,
 | 
			
		||||
            'username': 'customform',
 | 
			
		||||
            'password': 'secret',
 | 
			
		||||
        }, follow=True)
 | 
			
		||||
| 
						 | 
				
			
			@ -874,49 +872,41 @@ class AdminViewPermissionsTest(TestCase):
 | 
			
		|||
        # login POST dicts
 | 
			
		||||
        self.super_login = {
 | 
			
		||||
            REDIRECT_FIELD_NAME: '/test_admin/admin/',
 | 
			
		||||
            LOGIN_FORM_KEY: 1,
 | 
			
		||||
            'username': 'super',
 | 
			
		||||
            'password': 'secret',
 | 
			
		||||
        }
 | 
			
		||||
        self.super_email_login = {
 | 
			
		||||
            REDIRECT_FIELD_NAME: '/test_admin/admin/',
 | 
			
		||||
            LOGIN_FORM_KEY: 1,
 | 
			
		||||
            'username': 'super@example.com',
 | 
			
		||||
            'password': 'secret',
 | 
			
		||||
        }
 | 
			
		||||
        self.super_email_bad_login = {
 | 
			
		||||
            REDIRECT_FIELD_NAME: '/test_admin/admin/',
 | 
			
		||||
            LOGIN_FORM_KEY: 1,
 | 
			
		||||
            'username': 'super@example.com',
 | 
			
		||||
            'password': 'notsecret',
 | 
			
		||||
        }
 | 
			
		||||
        self.adduser_login = {
 | 
			
		||||
            REDIRECT_FIELD_NAME: '/test_admin/admin/',
 | 
			
		||||
            LOGIN_FORM_KEY: 1,
 | 
			
		||||
            'username': 'adduser',
 | 
			
		||||
            'password': 'secret',
 | 
			
		||||
        }
 | 
			
		||||
        self.changeuser_login = {
 | 
			
		||||
            REDIRECT_FIELD_NAME: '/test_admin/admin/',
 | 
			
		||||
            LOGIN_FORM_KEY: 1,
 | 
			
		||||
            'username': 'changeuser',
 | 
			
		||||
            'password': 'secret',
 | 
			
		||||
        }
 | 
			
		||||
        self.deleteuser_login = {
 | 
			
		||||
            REDIRECT_FIELD_NAME: '/test_admin/admin/',
 | 
			
		||||
            LOGIN_FORM_KEY: 1,
 | 
			
		||||
            'username': 'deleteuser',
 | 
			
		||||
            'password': 'secret',
 | 
			
		||||
        }
 | 
			
		||||
        self.joepublic_login = {
 | 
			
		||||
            REDIRECT_FIELD_NAME: '/test_admin/admin/',
 | 
			
		||||
            LOGIN_FORM_KEY: 1,
 | 
			
		||||
            'username': 'joepublic',
 | 
			
		||||
            'password': 'secret',
 | 
			
		||||
        }
 | 
			
		||||
        self.no_username_login = {
 | 
			
		||||
            REDIRECT_FIELD_NAME: '/test_admin/admin/',
 | 
			
		||||
            LOGIN_FORM_KEY: 1,
 | 
			
		||||
            'password': 'secret',
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1391,7 +1381,6 @@ class AdminViewsNoUrlTest(TestCase):
 | 
			
		|||
        # login POST dict
 | 
			
		||||
        self.changeuser_login = {
 | 
			
		||||
            REDIRECT_FIELD_NAME: '/test_admin/admin/',
 | 
			
		||||
            LOGIN_FORM_KEY: 1,
 | 
			
		||||
            'username': 'changeuser',
 | 
			
		||||
            'password': 'secret',
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -2600,7 +2589,6 @@ class AdminCustomQuerysetTest(TestCase):
 | 
			
		|||
        self.pks = [EmptyModel.objects.create().id for i in range(3)]
 | 
			
		||||
        self.super_login = {
 | 
			
		||||
            REDIRECT_FIELD_NAME: '/test_admin/admin/',
 | 
			
		||||
            LOGIN_FORM_KEY: 1,
 | 
			
		||||
            'username': 'super',
 | 
			
		||||
            'password': 'secret',
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue