Fixed #27053 -- Documented contrib.auth.get_user().

This commit is contained in:
Berker Peksag 2016-08-24 12:21:28 +03:00 committed by Tim Graham
parent 419b6ec7d0
commit f7e91cac68
2 changed files with 43 additions and 1 deletions

View File

@ -682,3 +682,26 @@ The following backends are available in :mod:`django.contrib.auth.backends`:
An :class:`~django.apps.AppConfig` for use if you :ref:`aren't using An :class:`~django.apps.AppConfig` for use if you :ref:`aren't using
<using-auth-without-models>` any of the built-in ``contrib.auth`` models. <using-auth-without-models>` any of the built-in ``contrib.auth`` models.
Utility functions
=================
.. currentmodule:: django.contrib.auth
.. function:: get_user(request)
Returns the user model instance associated with the given ``request``s
session.
It checks if the authentication backend stored in the session is present in
:setting:`AUTHENTICATION_BACKENDS`. If so, it uses the backend's
``get_user()`` method to retrieve the user model instance and then verifies
the session by calling the user model's
:meth:`~django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash`
method.
Returns an instance of :class:`~django.contrib.auth.models.AnonymousUser`
if the authentication backend stored in the session is no longer in
:setting:`AUTHENTICATION_BACKENDS`, if a user isn't returned by the
backend's ``get_user()`` method, or if the session auth hash doesn't
validate.

View File

@ -3,10 +3,11 @@ from __future__ import unicode_literals
import warnings import warnings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user, get_user_model
from django.contrib.auth.models import AnonymousUser, User from django.contrib.auth.models import AnonymousUser, User
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.db import IntegrityError from django.db import IntegrityError
from django.http import HttpRequest
from django.test import TestCase, override_settings from django.test import TestCase, override_settings
from django.utils import translation from django.utils import translation
@ -158,3 +159,21 @@ class BasicTestCase(TestCase):
with translation.override('es'): with translation.override('es'):
self.assertEqual(User._meta.verbose_name, 'usuario') self.assertEqual(User._meta.verbose_name, 'usuario')
self.assertEqual(User._meta.verbose_name_plural, 'usuarios') self.assertEqual(User._meta.verbose_name_plural, 'usuarios')
class TestGetUser(TestCase):
def test_get_user_anonymous(self):
request = HttpRequest()
request.session = self.client.session
user = get_user(request)
self.assertIsInstance(user, AnonymousUser)
def test_get_user(self):
created_user = User.objects.create_user('testuser', 'test@example.com', 'testpw')
self.client.login(username='testuser', password='testpw')
request = HttpRequest()
request.session = self.client.session
user = get_user(request)
self.assertIsInstance(user, User)
self.assertEqual(user.username, created_user.username)