Skip to main content

(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

  1. 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"
  1. Add corresponding app to INSTALLED_APPS:
INSTALLED_APPS = [
    ...
    "swap_user",
    "swap_user.to_email",
    ...
]
  1. Change AUTH_USER_MODEL to corresponding:
AUTH_USER_MODEL = "swap_to_email.EmailUser"
  1. If required replace django.contrib.admin in INSTALLED_APPS to something.

  2. Apply migrations:

python manage.py migrate swap_to_email

Architecture

Application swap_user split into 3 apps:

  • to_email - provides user with email username field
  • to_email_otp - provides user with email username field and OTP (One Time Password) authentication
  • to_phone - provides user with phone username field
  • to_phone_otp - provides user with phone 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 SQL TRUNCATE 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-swap-user-0.9.8.tar.gz (20.9 kB view details)

Uploaded Source

Built Distribution

django_swap_user-0.9.8-py3-none-any.whl (37.0 kB view details)

Uploaded Python 3

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

Hashes for django-swap-user-0.9.8.tar.gz
Algorithm Hash digest
SHA256 998ca28b2c68fac2756bbfe2bd72b30ef311f8057593446c8e7d3d4bdd5c1919
MD5 350f072b5af1f22b59c277a682f521e5
BLAKE2b-256 a65b0465127e43c62fbd20d3b4ae94804b50af0a7526fcb474b2439927dabc03

See more details on using hashes here.

File details

Details for the file django_swap_user-0.9.8-py3-none-any.whl.

File metadata

File hashes

Hashes for django_swap_user-0.9.8-py3-none-any.whl
Algorithm Hash digest
SHA256 07f2545a0786e8ff6e434bb41e9d86dff6597a086c40cc3ac933491ed6048077
MD5 970d353ce94d726a26dcdb215eb504c3
BLAKE2b-256 b9c4d105bb6c1643764e4684be950b5754c7e3a5df5797a30c8a816dc3c03f09

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page