1
0
mirror of https://github.com/django/django.git synced 2025-03-31 19:46:42 +00:00

Removed custom profile model functionality as per deprecation TL.

This commit is contained in:
Ramiro Morales 2013-06-28 15:13:06 -03:00
parent 5e08b792ef
commit c196564132
9 changed files with 13 additions and 167 deletions

View File

@ -413,38 +413,6 @@ class AbstractUser(AbstractBaseUser, PermissionsMixin):
""" """
send_mail(subject, message, from_email, [self.email]) send_mail(subject, message, from_email, [self.email])
def get_profile(self):
"""
Returns site-specific profile for this user. Raises
SiteProfileNotAvailable if this site does not allow profiles.
"""
warnings.warn("The use of AUTH_PROFILE_MODULE to define user profiles has been deprecated.",
DeprecationWarning, stacklevel=2)
if not hasattr(self, '_profile_cache'):
from django.conf import settings
if not getattr(settings, 'AUTH_PROFILE_MODULE', False):
raise SiteProfileNotAvailable(
'You need to set AUTH_PROFILE_MODULE in your project '
'settings')
try:
app_label, model_name = settings.AUTH_PROFILE_MODULE.split('.')
except ValueError:
raise SiteProfileNotAvailable(
'app_label and model_name should be separated by a dot in '
'the AUTH_PROFILE_MODULE setting')
try:
model = models.get_model(app_label, model_name)
if model is None:
raise SiteProfileNotAvailable(
'Unable to load the profile model, check '
'AUTH_PROFILE_MODULE in your project settings')
self._profile_cache = model._default_manager.using(
self._state.db).get(user__id__exact=self.id)
self._profile_cache.user = self
except (ImportError, ImproperlyConfigured):
raise SiteProfileNotAvailable
return self._profile_cache
class User(AbstractUser): class User(AbstractUser):
""" """

View File

@ -1,46 +1,9 @@
import warnings
from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.auth.models import (Group, User, SiteProfileNotAvailable, from django.contrib.auth.models import (Group, User, UserManager)
UserManager)
from django.contrib.auth.tests.utils import skipIfCustomUser from django.contrib.auth.tests.utils import skipIfCustomUser
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.test import TestCase from django.test import TestCase
from django.test.utils import override_settings from django.test.utils import override_settings
from django.utils import six
@skipIfCustomUser
@override_settings(USE_TZ=False, AUTH_PROFILE_MODULE='')
class ProfileTestCase(TestCase):
def test_site_profile_not_available(self):
user = User.objects.create(username='testclient')
# calling get_profile without AUTH_PROFILE_MODULE set
del settings.AUTH_PROFILE_MODULE
with warnings.catch_warnings():
warnings.simplefilter("ignore", DeprecationWarning)
with six.assertRaisesRegex(self, SiteProfileNotAvailable,
"You need to set AUTH_PROFILE_MODULE in your project"):
user.get_profile()
# Bad syntax in AUTH_PROFILE_MODULE:
settings.AUTH_PROFILE_MODULE = 'foobar'
with warnings.catch_warnings():
warnings.simplefilter("ignore", DeprecationWarning)
with six.assertRaisesRegex(self, SiteProfileNotAvailable,
"app_label and model_name should be separated by a dot"):
user.get_profile()
# module that doesn't exist
settings.AUTH_PROFILE_MODULE = 'foo.bar'
with warnings.catch_warnings():
warnings.simplefilter("ignore", DeprecationWarning)
with six.assertRaisesRegex(self, SiteProfileNotAvailable,
"Unable to load the profile model"):
user.get_profile()
@skipIfCustomUser @skipIfCustomUser

View File

@ -218,20 +218,6 @@ Methods
Sends an email to the user. If ``from_email`` is ``None``, Django uses Sends an email to the user. If ``from_email`` is ``None``, Django uses
the :setting:`DEFAULT_FROM_EMAIL`. the :setting:`DEFAULT_FROM_EMAIL`.
.. method:: get_profile()
.. deprecated:: 1.5
With the introduction of :ref:`custom User models <auth-custom-user>`,
the use of :setting:`AUTH_PROFILE_MODULE` to define a single profile
model is no longer supported. See the
:doc:`Django 1.5 release notes</releases/1.5>` for more information.
Returns a site-specific profile for this user. Raises
``django.contrib.auth.models.SiteProfileNotAvailable`` if the
current site doesn't allow profiles, or
:exc:`django.core.exceptions.ObjectDoesNotExist` if the user does not
have a profile.
Manager methods Manager methods
--------------- ---------------

View File

@ -2049,22 +2049,6 @@ A tuple of authentication backend classes (as strings) to use when attempting to
authenticate a user. See the :ref:`authentication backends documentation authenticate a user. See the :ref:`authentication backends documentation
<authentication-backends>` for details. <authentication-backends>` for details.
.. setting:: AUTH_PROFILE_MODULE
AUTH_PROFILE_MODULE
-------------------
.. deprecated:: 1.5
With the introduction of :ref:`custom User models <auth-custom-user>`,
the use of :setting:`AUTH_PROFILE_MODULE` to define a single profile
model is no longer supported. See the
:doc:`Django 1.5 release notes</releases/1.5>` for more information.
Default: Not defined
The site-specific user profile model used by this site. See
:ref:`User profiles <auth-profiles>`.
.. setting:: AUTH_USER_MODEL .. setting:: AUTH_USER_MODEL
AUTH_USER_MODEL AUTH_USER_MODEL

View File

@ -575,8 +575,8 @@ Miscellaneous
Features deprecated in 1.5 Features deprecated in 1.5
========================== ==========================
:setting:`AUTH_PROFILE_MODULE` ``AUTH_PROFILE_MODULE`` setting
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
With the introduction of :ref:`custom User models <auth-custom-user>`, there is With the introduction of :ref:`custom User models <auth-custom-user>`, there is
no longer any need for a built-in mechanism to store user profile data. no longer any need for a built-in mechanism to store user profile data.
@ -584,8 +584,8 @@ no longer any need for a built-in mechanism to store user profile data.
You can still define user profiles models that have a one-to-one relation with You can still define user profiles models that have a one-to-one relation with
the User model - in fact, for many applications needing to associate data with the User model - in fact, for many applications needing to associate data with
a User account, this will be an appropriate design pattern to follow. However, a User account, this will be an appropriate design pattern to follow. However,
the :setting:`AUTH_PROFILE_MODULE` setting, and the the ``AUTH_PROFILE_MODULE`` setting, and the
:meth:`~django.contrib.auth.models.User.get_profile()` method for accessing ``django.contrib.auth.models.User.get_profile()`` method for accessing
the user profile model, should not be used any longer. the user profile model, should not be used any longer.
Streaming behavior of :class:`~django.http.HttpResponse` Streaming behavior of :class:`~django.http.HttpResponse`

View File

@ -627,8 +627,8 @@ Features deprecated in 1.5
.. _simplejson-deprecation-beta-1: .. _simplejson-deprecation-beta-1:
:setting:`AUTH_PROFILE_MODULE` ``AUTH_PROFILE_MODULE``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
With the introduction of :ref:`custom User models <auth-custom-user>`, there is With the introduction of :ref:`custom User models <auth-custom-user>`, there is
no longer any need for a built-in mechanism to store user profile data. no longer any need for a built-in mechanism to store user profile data.
@ -636,8 +636,8 @@ no longer any need for a built-in mechanism to store user profile data.
You can still define user profiles models that have a one-to-one relation with You can still define user profiles models that have a one-to-one relation with
the User model - in fact, for many applications needing to associate data with the User model - in fact, for many applications needing to associate data with
a User account, this will be an appropriate design pattern to follow. However, a User account, this will be an appropriate design pattern to follow. However,
the :setting:`AUTH_PROFILE_MODULE` setting, and the the ``AUTH_PROFILE_MODULE`` setting, and the
:meth:`~django.contrib.auth.models.User.get_profile()` method for accessing ``django.contrib.auth.models.User.get_profile()`` method for accessing
the user profile model, should not be used any longer. the user profile model, should not be used any longer.
Streaming behavior of :class:`~django.http.HttpResponse` Streaming behavior of :class:`~django.http.HttpResponse`

View File

@ -732,8 +732,8 @@ deprecation schedule. Direct use of python markup libraries or 3rd party tag
libraries is preferred to Django maintaining this functionality in the libraries is preferred to Django maintaining this functionality in the
framework. framework.
:setting:`AUTH_PROFILE_MODULE` ``AUTH_PROFILE_MODULE``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
With the introduction of :ref:`custom User models <auth-custom-user>`, there is With the introduction of :ref:`custom User models <auth-custom-user>`, there is
no longer any need for a built-in mechanism to store user profile data. no longer any need for a built-in mechanism to store user profile data.
@ -741,8 +741,8 @@ no longer any need for a built-in mechanism to store user profile data.
You can still define user profiles models that have a one-to-one relation with You can still define user profiles models that have a one-to-one relation with
the User model - in fact, for many applications needing to associate data with the User model - in fact, for many applications needing to associate data with
a User account, this will be an appropriate design pattern to follow. However, a User account, this will be an appropriate design pattern to follow. However,
the :setting:`AUTH_PROFILE_MODULE` setting, and the the ``AUTH_PROFILE_MODULE`` setting, and the
:meth:`~django.contrib.auth.models.User.get_profile()` method for accessing ``django.contrib.auth.models.User.get_profile()`` method for accessing
the user profile model, should not be used any longer. the user profile model, should not be used any longer.
Streaming behavior of :class:`~django.http.HttpResponse` Streaming behavior of :class:`~django.http.HttpResponse`

View File

@ -354,40 +354,6 @@ model and adding the related fields may be your better option. However
existing links to the default User model within your project's apps may justify existing links to the default User model within your project's apps may justify
the extra database load. the extra database load.
.. _auth-profiles:
.. deprecated:: 1.5
With the introduction of :ref:`custom User models <auth-custom-user>`,
the use of :setting:`AUTH_PROFILE_MODULE` to define a single profile
model is no longer supported. See the
:doc:`Django 1.5 release notes</releases/1.5>` for more information.
Prior to 1.5, a single profile model could be specified site-wide with the
setting :setting:`AUTH_PROFILE_MODULE` with a string consisting of the
following items, separated by a dot:
1. The name of the application (case sensitive) in which the user
profile model is defined (in other words, the
name which was passed to :djadmin:`manage.py startapp <startapp>` to create
the application).
2. The name of the model (not case sensitive) class.
For example, if the profile model was a class named ``UserProfile`` and was
defined inside an application named ``accounts``, the appropriate setting would
be::
AUTH_PROFILE_MODULE = 'accounts.UserProfile'
When a user profile model has been defined and specified in this manner, each
:class:`~django.contrib.auth.models.User` object will have a method --
:class:`~django.contrib.auth.models.User.get_profile()` -- which returns the
instance of the user profile model associated with that
:class:`~django.contrib.auth.models.User`.
The method :class:`~django.contrib.auth.models.User.get_profile()`
does not create a profile if one does not exist.
.. _auth-custom-user: .. _auth-custom-user:
Substituting a custom User model Substituting a custom User model

View File

@ -3,9 +3,7 @@ from __future__ import absolute_import, unicode_literals
import datetime import datetime
import pickle import pickle
from operator import attrgetter from operator import attrgetter
import warnings
from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core import management from django.core import management
@ -1626,25 +1624,6 @@ class AuthTestCase(TestCase):
command_output = new_io.getvalue().strip() command_output = new_io.getvalue().strip()
self.assertTrue('"email": "alice@example.com"' in command_output) self.assertTrue('"email": "alice@example.com"' in command_output)
@override_settings(AUTH_PROFILE_MODULE='multiple_database.UserProfile')
class UserProfileTestCase(TestCase):
def test_user_profiles(self):
alice = User.objects.create_user('alice', 'alice@example.com')
bob = User.objects.db_manager('other').create_user('bob', 'bob@example.com')
alice_profile = UserProfile(user=alice, flavor='chocolate')
alice_profile.save()
bob_profile = UserProfile(user=bob, flavor='crunchy frog')
bob_profile.save()
with warnings.catch_warnings():
warnings.simplefilter("ignore", DeprecationWarning)
self.assertEqual(alice.get_profile().flavor, 'chocolate')
self.assertEqual(bob.get_profile().flavor, 'crunchy frog')
class AntiPetRouter(object): class AntiPetRouter(object):
# A router that only expresses an opinion on syncdb, # A router that only expresses an opinion on syncdb,
# passing pets to the 'other' database # passing pets to the 'other' database