(Beta) Simple and flexible way to swap default Django User
Project description
Django-Swap-User (Beta)
About
If you are tired from copying one custom user model from one project to another ones - use this package. This will do all for you.
Installation
pip install django-swap-user
Basic usage
- Choose one of models that suits for you and copy related settings from the table:
Application name | Username field | Description | INSTALLED_APPS |
AUTH_USER_MODEL |
Replace django.contrib.admin to |
---|---|---|---|---|---|
to_email |
email |
User with email username |
"swap_user", "swap_user.to_email", |
"swap_to_email.EmailUser" |
not required |
to_email_otp |
email |
User with email username, without password and OPT authentication |
"swap_user", "swap_user.to_email_otp", |
"swap_to_email_otp.EmailOTPUser" |
"swap_user.to_email_otp.apps.SiteConfig" |
to_phone |
phone |
User with phone username |
"swap_user", "swap_user.to_phone", |
"swap_to_phone.PhoneUser" |
not required |
to_phone_otp |
phone |
User with phone username, without password and OTP authentication |
"swap_user", "swap_user.to_phone_otp", |
"swap_to_phone_otp.PhoneOTPUser" |
"swap_user.to_phone_otp.apps.SiteConfig" |
- Add corresponding app to
INSTALLED_APPS
:
INSTALLED_APPS = [
...
"swap_user",
"swap_user.to_email",
...
]
- Change
AUTH_USER_MODEL
to corresponding:
AUTH_USER_MODEL = "swap_to_email.EmailUser"
-
If required replace
django.contrib.admin
inINSTALLED_APPS
to something. -
Apply migrations:
python manage.py migrate swap_to_email
Architecture
Application swap_user
split into 3 apps:
to_email
- provides user withemail
username fieldto_email_otp
- provides user withemail
username field and OTP (One Time Password) authenticationto_phone
- provides user withphone
username fieldto_phone_otp
- provides user withphone
username field and OTP (One Time Password) authentication
Why so unusual architecture?
Because if we leave them in one app, they all will create migrations and tables - such approach leads us to redundant tables. They will be treated as 3 custom models within the same app, which causes perplexing and cognitive burden.
With such approach (when there is a common app which contains internal apps) - the user choose and connect only the specific user model which suits best for concrete business-logic.
I have found such approach at Django REST Framework authtoken
application and decide to use it - reference is here.
Providing User model at start of project
When you are starting a project from zero or scratch - this is a best moment to provide custom User model. Because you have't a lot of migrations or you can easily regenerate them. Moreover, Django's official docs recommend to provide custom User model even if you are fully satisfied with default one - in future it will be easier to extend custom model that fits into your business cases.
Providing User model at mid of project
This is a harder way of doing things, but it is still possible to do:
- Do all the steps at testing database and ONLY IF all of them was successful - try to apply at production environment
- Please note that these steps are common - they fit in most cases, but in some circumstances you need act on situation.
- Create a backup of your database
- Add stable tag into your repository or save a commit hash reference
- Pray to the heavens
- Remove all of yours migrations in every app of Django's project
- Remove all records from
django_migrations
table, for example with SQLTRUNCATE django_migrations
- Now we have a "clean" state, so we can change default model
- Generate new migrations for all of your applications -
python manage.py makemigrations
- Now we need to fake migrate because we already have all the tables with data
- First fake the
auth
application because we are depending from this one -python manage.py migrate --fake auth
- Install this library, follow instructions and apply migrations
- Then fake rest of migrations we have -
python manage.py migrate --fake
- Run your application!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django-swap-user-0.9.8.tar.gz
.
File metadata
- Download URL: django-swap-user-0.9.8.tar.gz
- Upload date:
- Size: 20.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.12 CPython/3.7.7 Darwin/19.6.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 998ca28b2c68fac2756bbfe2bd72b30ef311f8057593446c8e7d3d4bdd5c1919 |
|
MD5 | 350f072b5af1f22b59c277a682f521e5 |
|
BLAKE2b-256 | a65b0465127e43c62fbd20d3b4ae94804b50af0a7526fcb474b2439927dabc03 |
File details
Details for the file django_swap_user-0.9.8-py3-none-any.whl
.
File metadata
- Download URL: django_swap_user-0.9.8-py3-none-any.whl
- Upload date:
- Size: 37.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.12 CPython/3.7.7 Darwin/19.6.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 07f2545a0786e8ff6e434bb41e9d86dff6597a086c40cc3ac933491ed6048077 |
|
MD5 | 970d353ce94d726a26dcdb215eb504c3 |
|
BLAKE2b-256 | b9c4d105bb6c1643764e4684be950b5754c7e3a5df5797a30c8a816dc3c03f09 |