Устанавливаем и настраиваем Django на локальной машине правильно

установить и настроить правильно означает сделать так, чтобы потом не было мучительно больно не нужно было всё сносить и настраивать заново.
Пример? Пожалуйста.
Документация Django прямо говорит:
If you’re starting a new project, it’s highly recommended to set up a custom user model, even if the default User model is sufficient for you. This model behaves identically to the default user model, but you’ll be able to customize it in the future if the need arises:
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass
Do this before creating any migrations or running manage.py migrate for the first time.
Т.е., ещё до запуска первой миграции следует объявить новую модель пользователя, даже если вот прямо сейчас старая модель вас устраивает. Потому что если потом она вдруг перестанет вас устраивать, то вы замучаетесь её переделывать. Нет, у сообщества Django даже и на такой случай есть инструкция, но мы-то уже предупреждены, поэтому сделаем нового юзера сразу.
Итак.
  1. Ставим самый свежий Питон. Как это сделать, смотрим здеся.
  2. Создаем папку для проекта и переходим в неё:
    mkdir project
    cd project
  3. Устанавливаем виртуальное окружение и активируем его (подставить в команду нужную версию Питона!):
    python3.9 -m venv env
    . env/bin/activate
  4. Устанавливаем Django:
    pip install django
  5. Создаем проект под названием my:
    django-admin startproject my
  6. Django создаст папку my и в ней еще одну папку my, в которой хранятся конфигурационные файлы, в частности, settings.py. Получается, что путь к этим файлам выглядит как project/my/my, что, конечно, не сильно читабельно, и было бы логичнее папку с настройками назвать соответственно. Например, config. Так и сделаем:
    cd my
    mv my/ config/
    Открываем manage.py для редактирования и меняем my.settings на config.settings
  7. Заходим в config/, там проходимся по файлам asgi.py и wsgi.py и меняем my.settings на config.settings.
  8. Открываем settings.py и меняем значения ROOT_URLCONF на 'config.urls' и WSGI_APPLICATION на 'config.wsgi.application'
  9. Вернёмся в папку проекта и создадим пакет для работы с пользователями (авторизация, аутентификация и т.д.). Назовём его account.
    django-admin startapp account
  10. Открываем account/models.py и заносим туда новую модель пользователя
    from django.contrib.auth.models import AbstractUser

    class User(AbstractUser):
        pass
    Потом идём в settings.py и там добавляем строчку
    AUTH_USER_MODEL = 'account.User'
    Потом, когда понадобится, можно будет добавить в эту модель атрибуты и методы.
  11. Теперь можно и промигрироваться. Идем в папку project/my/ и запускаем миграции:
    ./manage.py makemigrations
    ./manage.py migrate