User registration REST API, based on django-rest-framework.
WARNING: django-rest-registration
is only Python 3 compatible.
- Supported views:
- registration (sign-up) with verification
- login/logout (sign-in), session- or token-based
- user profile (retrieving / updating)
- reset password
- change password
- register (change) e-mail
- Views are compatible with django-rest-swagger
- Views can be authenticated via session or auth token
- Modeless (uses the user defined by
settings.AUTH_USER_MODEL
and also uses cryptographic signing instead of profile models) - Uses password validation
- Heavily tested (Above 99% code coverage)
- Supports only one email per user (as model field)
- Heavily based on Django (1.10+, 2.0+) an Django-REST-Framework (3.3+)
- Python3 only
- No JWT support
You can install django-rest-registration
lastest version via pip:
pip install django-rest-registration
Or install directly from source via GitHub:
pip install git+https://github.com/szopu/django-rest-registration
Then, you should add it to the INSTALLED_APPS
so the app templates
for notification emails can be accessed:
INSTALLED_APPS=(
...
'rest_registration',
),
After that, you can use the urls in your urlconfig, for instance (using new Django 2.x syntax):
api_urlpatterns = [
...
path('accounts/', include('rest_registration.api.urls')),
]
urlpatterns = [
...
path('api/v1/', include(api_urlpatterns)),
]
In Django 1.x you can use old url
instead of path
.
You can configure django-rest-registraton
using the REST_REGISTRATION
setting in your django settings (similarly to django-rest-framework
).
Below is sample, minimal config you can provide in your django settings which will satisfy the system checks:
REST_REGISTRATION = {
'REGISTER_VERIFICATION_ENABLED': False,
'RESET_PASSWORD_VERIFICATION_URL': '/reset-password/',
'REGISTER_EMAIL_VERIFICATION_ENABLED': False,
'VERIFICATION_FROM_EMAIL': '[email protected]',
}
The default values are:
REST_REGISTRATION = {
'USER_LOGIN_FIELDS': None,
'USER_HIDDEN_FIELDS': (
'is_active',
'is_staff',
'is_superuser',
'user_permissions',
'groups',
'date_joined',
),
'USER_PUBLIC_FIELDS': None,
'USER_EMAIL_FIELD': 'email',
'USER_VERIFICATION_FLAG_FIELD': 'is_active',
'REGISTER_SERIALIZER_CLASS': 'rest_registration.api.serializers.DefaultRegisterUserSerializer',
'REGISTER_SERIALIZER_PASSWORD_CONFIRM': True,
'REGISTER_VERIFICATION_ENABLED': True,
'REGISTER_VERIFICATION_PERIOD': datetime.timedelta(days=7),
'REGISTER_VERIFICATION_URL': None,
'REGISTER_VERIFICATION_EMAIL_TEMPLATES': {
'subject': 'rest_registration/register/subject.txt',
'body': 'rest_registration/register/body.txt',
},
'LOGIN_AUTHENTICATE_SESSION': None,
'LOGIN_RETRIEVE_TOKEN': None,
'RESET_PASSWORD_VERIFICATION_PERIOD': datetime.timedelta(days=1),
'RESET_PASSWORD_VERIFICATION_URL': None,
'RESET_PASSWORD_VERIFICATION_EMAIL_TEMPLATES': {
'subject': 'rest_registration/reset_password/subject.txt',
'body': 'rest_registration/reset_password/body.txt',
},
'REGISTER_EMAIL_VERIFICATION_ENABLED': True,
'REGISTER_EMAIL_VERIFICATION_PERIOD': datetime.timedelta(days=7),
'REGISTER_EMAIL_VERIFICATION_URL': None,
'REGISTER_EMAIL_VERIFICATION_EMAIL_TEMPLATES': {
'subject': 'rest_registration/register_email/subject.txt',
'body': 'rest_registration/register_email/body.txt',
},
'PROFILE_SERIALIZER_CLASS': 'rest_registration.api.serializers.DefaultUserProfileSerializer',
'VERIFICATION_FROM_EMAIL': None,
'VERIFICATION_REPLY_TO_EMAIL': None,
'SUCCESS_RESPONSE_BUILDER': 'rest_registration.utils.build_default_success_response',
}
The USER_*
fields can be set directly in the user class
(specified by settings.AUTH_USER_MODEL
) without using
the USER_
prefix (EMAIL_FIELD
, etc.). These settings will override these
provided in settings.REST_REGISTRATION
.