Django Accounts Center
The account-management layer for django-mvp projects. It gives a signed-in user one place to manage their account, and gives you a way to put more things there as the project grows.
This package is not usable on its own. It renders on the django-mvp app shell (DaisyUI 5 + Tailwind CSS v4 + django-cotton) and expects it.
What it provides
- An entrance layout. Sign-in, sign-up and recovery pages render as a centered card with your site logo, outside the app shell.
- An Account Center. A management layout, a sub menu, and an overview page whose cards come from whatever you have installed.
- An integration system. The machinery that lets a third-party app add its own account-management pages to that Account Center.
Integrations
An integration is a gated sub-app that teaches the Account Center about one
third-party package. You enable one by adding it to INSTALLED_APPS:
INSTALLED_APPS = ["dac", "dac.allauth", ...] # future: "dac.stripe", …
From there the integration contributes its own labelled menu group, any
overview cards it needs (through the dac_overview_template and
dac_overview_context hooks on its AppConfig), and its template overrides.
What is installed decides which contributions exist.
Because every integration is gated, a project carries only the dependencies of the integrations it turns on. Installing this package pulls in nothing you have not enabled.
Shipped today: dac.allauth, and it is the only one. Two limitations are worth
knowing before you write your own: an integration's URLs are still mounted by
the core app rather than contributed by the integration, and menu entries and
cards are decided once at startup rather than per visitor.
The allauth integration
dac.allauth does not fork allauth's page templates. It overrides allauth's
three layouts and its ~22 element templates:
allauth/layouts/entrance.html— login, signup, password reset, sign-in codes, … render as a centered card (no app shell) with your site logo.allauth/layouts/manage.html→dac/base.html— email, password, MFA, sessions and connected-accounts pages render inside the normal django-mvp shell with an "Account Center" sub menu beside the content.allauth/elements/*.html— every{% element %}(button, field, form, panel, alert, badge, provider button, table, …) maps to DaisyUI markup.
Because allauth's own stock page templates do the rendering, every allauth
feature and configuration variation works automatically — passkeys,
login-by-code, email verification by code, phone numbers, SOCIALACCOUNT_ONLY,
MFA (TOTP / WebAuthn / recovery codes / trust), user sessions — now and in
future allauth releases. On top of that it contributes overview cards for
email, password, 2FA, sessions and connected accounts, and a menu group whose
items appear only for the allauth apps you install.
The core dac app adds the pieces that are not allauth's business: the Account
Center overview page (account-center URL), the AccountCenterMenu the
integrations append to, a DAC_ICONS easy-icons pack, and a prebuilt dac.css
stylesheet. django-mvp's <c-user.sidebar-menu> picks up an "Account Center"
entry and a POST logout form once the URLs are installed.
Scope
This package is deliberately narrow.
- It requires django-mvp. Account management was taken out of django-mvp core so it could be maintained on its own, not so it could be used elsewhere. There is no standalone mode.
- It does not provide authentication. allauth does that. This package presents it.
- It is not a plugin marketplace. The integration pattern is open, so write one for your own project's apps whenever you need to. The set that ships here is curated: an integration is bundled only when it has broad appeal, a clear purpose, and a well-maintained package behind it. Anything narrower belongs in the project that needs it.
The goals this package steers toward are recorded in GOALS.md.
Installation
pip install django-accounts-center[allauth]
1. Settings
INSTALLED_APPS = [
# ...
"django.contrib.sites",
"dac",
"dac.allauth", # BEFORE allauth so template overrides win
"mvp",
"allauth",
"allauth.account",
"allauth.socialaccount", # optional
"allauth.mfa", # optional
"allauth.usersessions", # optional
"easy_icons",
"flex_menu",
"django_cotton",
# ...
]
SITE_ID = 1
MIDDLEWARE = [
# ...
"allauth.account.middleware.AccountMiddleware",
]
AUTHENTICATION_BACKENDS = [
"django.contrib.auth.backends.ModelBackend",
"allauth.account.auth_backends.AuthenticationBackend",
]
TEMPLATES = [{
# ...
"APP_DIRS": True,
"OPTIONS": {"context_processors": [
"django.template.context_processors.request",
# ...
"mvp.context_processors.mvp_config",
]},
}]
# django-mvp shell: show the user menu at the bottom of the sidebar.
MVP_CONFIG = {
"layout": {
"sidebar": {"footer": ["user.sidebar-menu"]},
},
}
# Icons: mvp's Bootstrap Icons pack + dac's account icons.
EASY_ICONS = {
"default": {
"renderer": "easy_icons.renderers.ProviderRenderer",
"config": {"tag": "i"},
"packs": ["mvp.utils.BS5_ICONS", "dac.icons.DAC_ICONS"],
},
}
FLEX_MENUS = {
"renderers": {
"sidebar": "mvp.renderers.SidebarRenderer",
"dock": "mvp.renderers.MobileFooterNavRenderer",
},
}
LOGIN_URL = "account_login"
LOGIN_REDIRECT_URL = "/accounts/"
2. URLs
dac's URLconf includes allauth.urls for you — mount it once:
urlpatterns = [
path("accounts/", include("dac.urls")),
# ...
]
This registers the account-center overview page at /accounts/ plus all of
allauth's URLs (/accounts/login/, /accounts/email/, /accounts/2fa/, …).
3. Migrate
python manage.py migrate
That's it. Anonymous users get centered entrance pages. Authenticated users reach the Account Center from the user menu at the bottom of the sidebar.
Customisation
- Re-skin everything: override any
allauth/elements/*.htmltemplate in your project — it applies across all allauth pages at once. - Page-level tweaks: override individual allauth page templates the normal Django way (your project templates win over dac's and allauth's). Prefer element overrides — per-page forks are what this package exists to avoid.
- Entrance pages: give your own app a signed-out page by extending
dac/entrance.htmland filling{% block content %}. It brings the same chrome dac's own signed-out pages use. For a wider card, override{% block entrance %}instead, wrapping<c-dac.entrance size="full">around your{% block content %}— the content block moves inside the override, because a template can declare a block only once. The default width andfullare the only two until django-mvp#126 widens the underlying component. - Sub menu: append items (or a labelled
mvp.menus.MenuGroup) todac.menus.AccountCenterMenufrom your ownmenus.py(e.g. a profile-edit page). Items may declareurl_namesprefixes inextra_contextso breadcrumbs resolve their sub-pages. - Overview page: subclass
dac.views.AccountCenterViewand point theaccount-centerURL at it, or overridedac/account_center.html. - Social login icons:
dac.allauthships brand SVGs for the major providers (Google, GitHub, Microsoft, Apple, Facebook, X, LinkedIn, GitLab, Discord, ORCID) in itsicons/template dir. Register them under a django-easy-icons"svg"renderer keyed by allauth provider id (see the exampleEASY_ICONSsetting).provider.htmlrenders them with{% icon provider_id renderer="svg" %}, so a provider without a registered icon raisesIconNotFound(caught in development, not shipped broken), and any icon is overridable via yourEASY_ICONSconfig or a template shadow. - Styling: dac ships a prebuilt
dac.css(Tailwind v4 + DaisyUI 5 over both mvp's and dac's templates). If your project runs its own Tailwind build, add dac's templates as a source alongside mvp's (seeassets/tailwind.css) and override thestylesblock.
Development
git clone https://github.com/SamuelJennings/django-accounts-center.git
cd django-accounts-center
poetry install
npm install
# run the example project
python manage.py runserver
# rebuild the shipped stylesheet after template changes
npm run build:css
# tests
pytest
The example/ project exercises an aggressive allauth configuration
(passkeys, login-by-code, email verification by code, MFA, three social
providers) and tests/ includes an architecture guard
(tests/test_architecture.py) that fails if anyone reintroduces per-page
allauth template forks.
License
MIT
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_accounts_center-0.7.1.tar.gz.
File metadata
- Download URL: django_accounts_center-0.7.1.tar.gz
- Upload date:
- Size: 69.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d955b51caa7680df4bf4fa247cba8a3cd4b8280a27f1456e1742983b1b01c71
|
|
| MD5 |
ab656f4b3700f2783cf481e7cb8bc177
|
|
| BLAKE2b-256 |
b88d8aabe754a18c4d785dbe59a4e1693fdd10345c3098c5dff0631526fb1fb7
|
Provenance
The following attestation bundles were made for django_accounts_center-0.7.1.tar.gz:
Publisher:
publish.yml on django-mvp/django-accounts-center
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
django_accounts_center-0.7.1.tar.gz -
Subject digest:
8d955b51caa7680df4bf4fa247cba8a3cd4b8280a27f1456e1742983b1b01c71 - Sigstore transparency entry: 2357827282
- Sigstore integration time:
-
Permalink:
django-mvp/django-accounts-center@08d658f158d2aeadfa94e68133cc0215169f9d24 -
Branch / Tag:
refs/tags/v0.7.1 - Owner: https://github.com/django-mvp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@08d658f158d2aeadfa94e68133cc0215169f9d24 -
Trigger Event:
push
-
Statement type:
File details
Details for the file django_accounts_center-0.7.1-py3-none-any.whl.
File metadata
- Download URL: django_accounts_center-0.7.1-py3-none-any.whl
- Upload date:
- Size: 86.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab3c76d8f656efe0b61d27db6554d4083581e2e6962ac0f890a04d3d394aacf8
|
|
| MD5 |
33673b3cc6971c715b726c45e1f2d973
|
|
| BLAKE2b-256 |
ccb6f3170ef70449d73cccbf1dd26d25961bd512930730c3eed3e42056c87ad9
|
Provenance
The following attestation bundles were made for django_accounts_center-0.7.1-py3-none-any.whl:
Publisher:
publish.yml on django-mvp/django-accounts-center
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
django_accounts_center-0.7.1-py3-none-any.whl -
Subject digest:
ab3c76d8f656efe0b61d27db6554d4083581e2e6962ac0f890a04d3d394aacf8 - Sigstore transparency entry: 2357827373
- Sigstore integration time:
-
Permalink:
django-mvp/django-accounts-center@08d658f158d2aeadfa94e68133cc0215169f9d24 -
Branch / Tag:
refs/tags/v0.7.1 - Owner: https://github.com/django-mvp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@08d658f158d2aeadfa94e68133cc0215169f9d24 -
Trigger Event:
push
-
Statement type: