django-username-email


Namedjango-username-email JSON
Version 2.5.6 PyPI version JSON
download
home_pagehttps://github.com/tmm/django-username-email/
SummaryCustom Django User model that makes email the USERNAME_FIELD.
upload_time2024-09-19 01:13:43
maintainerNone
docs_urlNone
authorAdam Taylor
requires_pythonNone
licenseMIT
keywords user email username
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            CUser, make email the USERNAME\_FIELD
=====================================

CUser makes it easy to use email address as your identification token
instead of a username.

CUser is a custom Django user model (extends ``AbstractBaseUser``) so it
takes a tiny amount of effort to use.

The only difference between CUser and the vanilla Django ``User`` is email
address is the ``USERNAME_FIELD`` (and username does not exist).

CUser supports Django 3.2 - 5.1. If you need to use CUser with
Django 1.8 - 3.1, you must install an older, unmaintained version of
CUser, as noted in the "Install & Set up" section.

Why use CUser?
--------------

Because you want everything in ``django.contrib.auth`` except for the
``username`` field and you also want users to **log in with email addresses**.
And you don't want to create your own custom user model or authentication
backend.

Install & Set up
----------------

**Important:** To keep things simple, the steps below will guide you through
the process of using CUser's ``CUser`` model for your Django project's user
model. However, it is strongly recommended that you set up a custom user model
that extends CUser's ``AbstractCUser`` class, even if CUser's ``CUser`` model
is sufficient for you (this way, you can customize the user model if the need
arises). If you would *not* like to follow this recommendation and just want to
use CUser's ``CUser`` model, simply follow the steps below (you can skip the
rest of this paragraph). If you *would* like to follow this recommendation, you
should still follow the steps below, but with the following adjustments: After
step 3, follow
`these instructions <https://docs.djangoproject.com/en/3.2/topics/auth/customizing/#using-a-custom-user-model-when-starting-a-project>`_,
but instead of using ``from django.contrib.auth.models import AbstractUser``
use ``from cuser.models import AbstractCUser`` and instead of using
``from django.contrib.auth.admin import UserAdmin`` use
``from cuser.admin import UserAdmin``. Then for step 4 of the steps below, you
should set ``AUTH_USER_MODEL`` to your custom user model instead of CUser's
``CUser`` model. You should then run ``python manage.py makemigrations``. After
that, you may follow the remaining steps below just the way they are.

1. If your Django project previously used Django's default user model,
   ``django.contrib.auth.models.User``, or if you are unfamiliar with using
   custom user models, jump to **Notes** first (then come
   back). Otherwise, continue onward!

2. Install with ``pip``:

   .. code-block:: shell

       # Django 3.2 - 5.1
       pip install django-username-email

       # Django 3.1 (unmaintained)
       pip install django-username-email==2.4.2

       # Django 2.2 or 3.0 (unmaintained)
       pip install django-username-email==2.3.1

       # Django 2.0 or 2.1 (unmaintained)
       pip install django-username-email==2.2.4

       # Django 1.11 (unmaintained)
       pip install django-username-email==2.1.6

       # Django 1.8 - 1.10 (unmaintained)
       pip install django-username-email==2.1.2

3. Add ``cuser`` to your ``INSTALLED_APPS`` setting:

   .. code-block:: python

       INSTALLED_APPS = [
           ...
           'cuser',
       ]

4. Specify the custom model as the default user model for your project
   using the ``AUTH_USER_MODEL`` setting in your settings.py:

   .. code-block:: python

       AUTH_USER_MODEL = 'cuser.CUser'

5. If you use Django's default ``AuthenticationForm`` class, it is
   strongly recommended that you replace it with the one included with
   CUser. This will make the ``<input>`` have its ``type`` attribute set
   to ``email`` and browsers' autocomplete feature will suggest email
   addresses instead of usernames. For example, if your project is using
   Django's default ``LoginView`` view (or ``login`` view in Django < 1.11), this is
   what you would put in your urls.py in order to make use of CUser's
   ``AuthenticationForm`` class:

   .. code-block:: python

       from cuser.forms import AuthenticationForm
       from django.conf.urls import include, url
       from django.contrib.auth.views import LoginView

       urlpatterns = [
           url(r'^accounts/login/$', LoginView.as_view(authentication_form=AuthenticationForm), name='login'),
           url(r'^accounts/', include('django.contrib.auth.urls')),
           ...
       ]

   Or if you're using Django < 1.11:

   .. code-block:: python

       from cuser.forms import AuthenticationForm
       from django.conf.urls import include, url
       from django.contrib.auth.views import login

       urlpatterns = [
           url(r'^accounts/login/$', login, {'authentication_form': AuthenticationForm}, name='login'),
           url(r'^accounts/', include('django.contrib.auth.urls')),
           ...
       ]

6. Run migrations.

   .. code-block:: shell

       python manage.py migrate

7. There is a good chance that you want foo@example.com and FOO@example.com to
   be treated as the same email address. There is a variety of ways to go about
   doing this. How you handle it will depend on the needs of your project and
   personal preference, so CUser does not provide a solution for this out of
   the box. You will need to address this yourself if this applies to you. If
   you're using CUser's ``AuthenticationForm`` class (see step 5), you may want
   to subclass it and override ``error_messages['invalid_login']``.

Configuration
-------------

To override any of the default settings, create a dictionary named ``CUSER`` in
your settings.py with each setting you want to override. For example:

.. code-block:: python

    CUSER = {
        'app_verbose_name': 'Authentication and Authorization',
        'register_proxy_auth_group_model': True,
    }

These are the settings:

``app_verbose_name`` (default: ``_("Custom User")``)
****************************************************

This controls the value that CUser will use for its ``AppConfig`` class'
``verbose_name``.

``register_proxy_auth_group_model`` (default: ``False``)
********************************************************

When set to ``True``, CUser's admin.py will unregister Django's default
``Group`` model and register its own proxy model of Django's default ``Group``
model (also named ``Group``). This is useful if you want Django's default
``Group`` model to appear in the same part of the admin as CUser's ``CUser``
model.

Notes
-----

If you have tables referencing Django's ``User`` model, you will have to
delete those table and migrations, then re-migrate. This will ensure
everything is set up correctly from the beginning.

Instead of referring to User directly, you should reference the user model
using ``django.contrib.auth.get_user_model()``

When you define a foreign key or many-to-many relations to the ``User``
model, you should specify the custom model using the ``AUTH_USER_MODEL``
setting.

For example:

.. code-block:: python

    from django.conf import settings
    from django.db import models

    class Profile(models.Model):
        user = models.ForeignKey(
            settings.AUTH_USER_MODEL,
            on_delete=models.CASCADE,
    )

License
-------

Released under the MIT license. See LICENSE for details.

Original author
---------------

Tom Meagher

Questions, comments, or anything else?
--------------------------------------

-  Open an issue

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/tmm/django-username-email/",
    "name": "django-username-email",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "user email username",
    "author": "Adam Taylor",
    "author_email": "ataylor32@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/f5/46/8d3abb975f8635f67574a262cc2b0c6675bc0887d8d0f3de9e53c778f275/django_username_email-2.5.6.tar.gz",
    "platform": null,
    "description": "CUser, make email the USERNAME\\_FIELD\n=====================================\n\nCUser makes it easy to use email address as your identification token\ninstead of a username.\n\nCUser is a custom Django user model (extends ``AbstractBaseUser``) so it\ntakes a tiny amount of effort to use.\n\nThe only difference between CUser and the vanilla Django ``User`` is email\naddress is the ``USERNAME_FIELD`` (and username does not exist).\n\nCUser supports Django 3.2 - 5.1. If you need to use CUser with\nDjango 1.8 - 3.1, you must install an older, unmaintained version of\nCUser, as noted in the \"Install & Set up\" section.\n\nWhy use CUser?\n--------------\n\nBecause you want everything in ``django.contrib.auth`` except for the\n``username`` field and you also want users to **log in with email addresses**.\nAnd you don't want to create your own custom user model or authentication\nbackend.\n\nInstall & Set up\n----------------\n\n**Important:** To keep things simple, the steps below will guide you through\nthe process of using CUser's ``CUser`` model for your Django project's user\nmodel. However, it is strongly recommended that you set up a custom user model\nthat extends CUser's ``AbstractCUser`` class, even if CUser's ``CUser`` model\nis sufficient for you (this way, you can customize the user model if the need\narises). If you would *not* like to follow this recommendation and just want to\nuse CUser's ``CUser`` model, simply follow the steps below (you can skip the\nrest of this paragraph). If you *would* like to follow this recommendation, you\nshould still follow the steps below, but with the following adjustments: After\nstep 3, follow\n`these instructions <https://docs.djangoproject.com/en/3.2/topics/auth/customizing/#using-a-custom-user-model-when-starting-a-project>`_,\nbut instead of using ``from django.contrib.auth.models import AbstractUser``\nuse ``from cuser.models import AbstractCUser`` and instead of using\n``from django.contrib.auth.admin import UserAdmin`` use\n``from cuser.admin import UserAdmin``. Then for step 4 of the steps below, you\nshould set ``AUTH_USER_MODEL`` to your custom user model instead of CUser's\n``CUser`` model. You should then run ``python manage.py makemigrations``. After\nthat, you may follow the remaining steps below just the way they are.\n\n1. If your Django project previously used Django's default user model,\n   ``django.contrib.auth.models.User``, or if you are unfamiliar with using\n   custom user models, jump to **Notes** first (then come\n   back). Otherwise, continue onward!\n\n2. Install with ``pip``:\n\n   .. code-block:: shell\n\n       # Django 3.2 - 5.1\n       pip install django-username-email\n\n       # Django 3.1 (unmaintained)\n       pip install django-username-email==2.4.2\n\n       # Django 2.2 or 3.0 (unmaintained)\n       pip install django-username-email==2.3.1\n\n       # Django 2.0 or 2.1 (unmaintained)\n       pip install django-username-email==2.2.4\n\n       # Django 1.11 (unmaintained)\n       pip install django-username-email==2.1.6\n\n       # Django 1.8 - 1.10 (unmaintained)\n       pip install django-username-email==2.1.2\n\n3. Add ``cuser`` to your ``INSTALLED_APPS`` setting:\n\n   .. code-block:: python\n\n       INSTALLED_APPS = [\n           ...\n           'cuser',\n       ]\n\n4. Specify the custom model as the default user model for your project\n   using the ``AUTH_USER_MODEL`` setting in your settings.py:\n\n   .. code-block:: python\n\n       AUTH_USER_MODEL = 'cuser.CUser'\n\n5. If you use Django's default ``AuthenticationForm`` class, it is\n   strongly recommended that you replace it with the one included with\n   CUser. This will make the ``<input>`` have its ``type`` attribute set\n   to ``email`` and browsers' autocomplete feature will suggest email\n   addresses instead of usernames. For example, if your project is using\n   Django's default ``LoginView`` view (or ``login`` view in Django < 1.11), this is\n   what you would put in your urls.py in order to make use of CUser's\n   ``AuthenticationForm`` class:\n\n   .. code-block:: python\n\n       from cuser.forms import AuthenticationForm\n       from django.conf.urls import include, url\n       from django.contrib.auth.views import LoginView\n\n       urlpatterns = [\n           url(r'^accounts/login/$', LoginView.as_view(authentication_form=AuthenticationForm), name='login'),\n           url(r'^accounts/', include('django.contrib.auth.urls')),\n           ...\n       ]\n\n   Or if you're using Django < 1.11:\n\n   .. code-block:: python\n\n       from cuser.forms import AuthenticationForm\n       from django.conf.urls import include, url\n       from django.contrib.auth.views import login\n\n       urlpatterns = [\n           url(r'^accounts/login/$', login, {'authentication_form': AuthenticationForm}, name='login'),\n           url(r'^accounts/', include('django.contrib.auth.urls')),\n           ...\n       ]\n\n6. Run migrations.\n\n   .. code-block:: shell\n\n       python manage.py migrate\n\n7. There is a good chance that you want foo@example.com and FOO@example.com to\n   be treated as the same email address. There is a variety of ways to go about\n   doing this. How you handle it will depend on the needs of your project and\n   personal preference, so CUser does not provide a solution for this out of\n   the box. You will need to address this yourself if this applies to you. If\n   you're using CUser's ``AuthenticationForm`` class (see step 5), you may want\n   to subclass it and override ``error_messages['invalid_login']``.\n\nConfiguration\n-------------\n\nTo override any of the default settings, create a dictionary named ``CUSER`` in\nyour settings.py with each setting you want to override. For example:\n\n.. code-block:: python\n\n    CUSER = {\n        'app_verbose_name': 'Authentication and Authorization',\n        'register_proxy_auth_group_model': True,\n    }\n\nThese are the settings:\n\n``app_verbose_name`` (default: ``_(\"Custom User\")``)\n****************************************************\n\nThis controls the value that CUser will use for its ``AppConfig`` class'\n``verbose_name``.\n\n``register_proxy_auth_group_model`` (default: ``False``)\n********************************************************\n\nWhen set to ``True``, CUser's admin.py will unregister Django's default\n``Group`` model and register its own proxy model of Django's default ``Group``\nmodel (also named ``Group``). This is useful if you want Django's default\n``Group`` model to appear in the same part of the admin as CUser's ``CUser``\nmodel.\n\nNotes\n-----\n\nIf you have tables referencing Django's ``User`` model, you will have to\ndelete those table and migrations, then re-migrate. This will ensure\neverything is set up correctly from the beginning.\n\nInstead of referring to User directly, you should reference the user model\nusing ``django.contrib.auth.get_user_model()``\n\nWhen you define a foreign key or many-to-many relations to the ``User``\nmodel, you should specify the custom model using the ``AUTH_USER_MODEL``\nsetting.\n\nFor example:\n\n.. code-block:: python\n\n    from django.conf import settings\n    from django.db import models\n\n    class Profile(models.Model):\n        user = models.ForeignKey(\n            settings.AUTH_USER_MODEL,\n            on_delete=models.CASCADE,\n    )\n\nLicense\n-------\n\nReleased under the MIT license. See LICENSE for details.\n\nOriginal author\n---------------\n\nTom Meagher\n\nQuestions, comments, or anything else?\n--------------------------------------\n\n-  Open an issue\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Custom Django User model that makes email the USERNAME_FIELD.",
    "version": "2.5.6",
    "project_urls": {
        "Homepage": "https://github.com/tmm/django-username-email/"
    },
    "split_keywords": [
        "user",
        "email",
        "username"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "adf98c64629569e7e131b0facbd3522a1446122200fb466b97e04531ce2ca88a",
                "md5": "7bbfd8563717a7d9fea95520bd30b579",
                "sha256": "0c35008c138c8dce9fab33f86179a87d2e3e3962ea738c5ab62fc5f7e2021187"
            },
            "downloads": -1,
            "filename": "django_username_email-2.5.6-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7bbfd8563717a7d9fea95520bd30b579",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 13440,
            "upload_time": "2024-09-19T01:13:41",
            "upload_time_iso_8601": "2024-09-19T01:13:41.823585Z",
            "url": "https://files.pythonhosted.org/packages/ad/f9/8c64629569e7e131b0facbd3522a1446122200fb466b97e04531ce2ca88a/django_username_email-2.5.6-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f5468d3abb975f8635f67574a262cc2b0c6675bc0887d8d0f3de9e53c778f275",
                "md5": "13d8e9d4a40a3b3312bb79607f1e505d",
                "sha256": "5c7eb9eb47bad6d3246cb05993f2f8e95d41dfb852dffb63acd6d26550934079"
            },
            "downloads": -1,
            "filename": "django_username_email-2.5.6.tar.gz",
            "has_sig": false,
            "md5_digest": "13d8e9d4a40a3b3312bb79607f1e505d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 13596,
            "upload_time": "2024-09-19T01:13:43",
            "upload_time_iso_8601": "2024-09-19T01:13:43.213617Z",
            "url": "https://files.pythonhosted.org/packages/f5/46/8d3abb975f8635f67574a262cc2b0c6675bc0887d8d0f3de9e53c778f275/django_username_email-2.5.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-09-19 01:13:43",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "tmm",
    "github_project": "django-username-email",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "django-username-email"
}
        
Elapsed time: 0.31567s