Migration from Pinax¶
django-user-accounts is based on pinax.apps.account
combining some of
the supporting apps. django-email-confirmation, pinax.apps.signup_codes
and bits of django-timezones have been merged to create django-user-accounts.
This document will outline the changes needed to migrate from Pinax to using this app in your Django project. If you are new to django-user-accounts then this guide will not be useful to you.
Database changes¶
Due to combining apps the table layout when converting from Pinax has changed. We’ve also taken the opportunity to update the schema to take advantage of much saner defaults. Here is SQL to convert from Pinax to django-user-accounts.
PostgreSQL¶
ALTER TABLE "signup_codes_signupcode" RENAME TO "account_signupcode";
ALTER TABLE "signup_codes_signupcoderesult" RENAME TO "account_signupcoderesult";
ALTER TABLE "emailconfirmation_emailaddress" RENAME TO "account_emailaddress";
ALTER TABLE "emailconfirmation_emailconfirmation" RENAME TO "account_emailconfirmation";
DROP TABLE "account_passwordreset";
ALTER TABLE "account_signupcode" ALTER COLUMN "code" TYPE varchar(64);
ALTER TABLE "account_signupcode" ADD CONSTRAINT "account_signupcode_code_key" UNIQUE ("code");
ALTER TABLE "account_emailconfirmation" RENAME COLUMN "confirmation_key" TO "key";
ALTER TABLE "account_emailconfirmation" ALTER COLUMN "key" TYPE varchar(64);
ALTER TABLE account_emailconfirmation ADD COLUMN created timestamp with time zone;
UPDATE account_emailconfirmation SET created = sent;
ALTER TABLE account_emailconfirmation ALTER COLUMN created SET NOT NULL;
ALTER TABLE account_emailconfirmation ALTER COLUMN sent DROP NOT NULL;
If ACCOUNT_EMAIL_UNIQUE
is set to True
(the default value) you need:
ALTER TABLE "account_emailaddress" ADD CONSTRAINT "account_emailaddress_email_key" UNIQUE ("email");
ALTER TABLE "account_emailaddress" DROP CONSTRAINT "emailconfirmation_emailaddress_user_id_email_key";
MySQL¶
RENAME TABLE `emailconfirmation_emailaddress` TO `account_emailaddress` ;
RENAME TABLE `emailconfirmation_emailconfirmation` TO `account_emailconfirmation` ;
DROP TABLE account_passwordreset;
ALTER TABLE `account_emailconfirmation` CHANGE `confirmation_key` `key` VARCHAR(64) NOT NULL;
ALTER TABLE `account_emailconfirmation` ADD UNIQUE (`key`);
ALTER TABLE account_emailconfirmation ADD COLUMN created datetime NOT NULL;
UPDATE account_emailconfirmation SET created = sent;
ALTER TABLE `account_emailconfirmation` CHANGE `sent` `sent` DATETIME NULL;
If ACCOUNT_EMAIL_UNIQUE
is set to True
(the default value) you need:
ALTER TABLE `account_emailaddress` ADD UNIQUE (`email`);
ALTER TABLE account_emailaddress DROP INDEX user_id;
If you have installed pinax.apps.signup_codes
:
RENAME TABLE `signup_codes_signupcode` TO `account_signupcode` ;
RENAME TABLE `signup_codes_signupcoderesult` TO `account_signupcoderesult` ;
URL changes¶
Here is a list of all URLs provided by django-user-accounts and how they map
from Pinax. This assumes account.urls
is mounted at /account/
as it
was in Pinax.
Pinax | django-user-accounts |
---|---|
/account/login/ |
/account/login/ |
/account/signup/ |
/account/signup/ |
/account/confirm_email/ |
/account/confirm_email/ |
/account/password_change/ |
/account/password/ [1] |
/account/password_reset/ |
/account/password/reset/ |
/account/password_reset_done/ |
removed |
/account/password_reset_key/<key>/ |
/account/password/reset/<token>/ |
[1] | When user is anonymous and requests a GET the user is redirected to
/account/password/reset/ . |
View changes¶
All views have been converted to class-based views. This is a big departure from the traditional function-based, but has the benefit of being much more flexible.
@@@ todo: table of changes
Settings changes¶
We have cleaned up settings and set saner defaults used by django-user-accounts.
Pinax | django-user-accounts |
---|---|
ACCOUNT_OPEN_SIGNUP = True |
ACCOUNT_OPEN_SIGNUP = True |
ACCOUNT_UNIQUE_EMAIL = False |
ACCOUNT_EMAIL_UNIQUE = True |
EMAIL_CONFIRMATION_UNIQUE_EMAIL = False |
removed |
General changes¶
django-user-accounts requires Django 1.4. This means we can take advantage of many of the new features offered by Django. This app implements all of the best practices of Django 1.4. If there is something missing you should let us know!