A user for djangorestframework that uses an email as the username.
- Use email as username for loging in
- One name field instead of first name and last name
- Endpoints for creating an account, viewing, and updating accounts
- Django admin to work with EmailUser model.
- Python 3.5+
- Django 2.2+
- Djangorestframework 3.10+
Install using pip:
$ pip install djangorestframework_emailuserAdd 'emailuser' to INSTALLED_APPS:
# mysite/settings.py
INSTALLED_APPS = [
...
'emailuser',
]Add the following line to settings.py to override django's default User
model with the 'EmailUser' model:
# mysite/settings.py
AUTH_USER_MODEL = 'emailuser.EmailUser'Add urls to url conf:
# mysite/urls.py
from django.urls import path, include
urlpatterns = [
...
path('accounts/', include('emailuser.urls')),
]To create a user programatically:
from django.contrib.auth import get_user_model
normal_user = get_user_model().objects.create_user(
email='me@example.com',
name='My Name',
password='MyPassword'
)
superuser = get_user_model().objects.create_superuser(
email='admin@example.com',
name='Super Name',
password='MySuperPassword'
)Assuming emailuser urls were set to /accounts/:
POST {"email": email, "name": name, "password": password}
to /accounts/users/register
PUT {"email": email, "name": name, "password": password}
to /accounts/users/<int:pk>/
or
PATCH the attribute you want to change
to /accounts/users/<int:pk>/
To reference user object in your code as a string (As for foreign keys):
from django.conf import settings
user_model = settings.AUTH_USER_MODELTo reference the user class directly:
from django.contrib.auth import get_user_model
user_model = get_user_model()See Django docs for more details.
The EmailUser model has the following attributes:
- The email address used as the login username.
- name
- A single field for the name of the user.
- password
- The password is hashed as set by the django settings.
- is_superuser
- A boolean attribute that can only be set programatically.
- is_staff
- A boolean attribute that can be set by the admin site or programatically.
EmailUser also subclasses django.contrib.auth.models.PermissionsMixin.