Package: tom-registration
TOM RegistrationThis reusable TOM Toolkit app provides support for two user registration flows in the TOM Toolkit.The two registration flows are as follows:Open Registration - In this flow, the user fills in a registration form and is immediately able to access the TOM as a member of the Public Group.Approval Registration - In this flow, the user fills in a registration form, and is inactive until an administrator reviews and approves their registration.InstallationInstall the package into your TOM environment:pipinstalltom_registrationIn your projectsettings.py, addtom_registrationto yourINSTALLED_APPSsetting:INSTALLED_APPS=[...'tom_registration',]And add the follow setting, with appropriate values for your use case:TOM_REGISTRATION={'REGISTRATION_AUTHENTICATION_BACKEND':'django.contrib.auth.backends.ModelBackend','REGISTRATION_REDIRECT_PATTERN':'home','SEND_APPROVAL_EMAILS':True}To prevent logged-in users from accessing the registration page, addRedirectAuthenticatedUsersFromRegisterMiddlewareto theMIDDLEWAREsettings:MIDDLEWARE=[...'tom_common.middleware.AuthStrategyMiddleware','tom_registration.middleware.RedirectAuthenticatedUsersFromRegisterMiddleware',]Depending on your preferred registration flow, include the appropriate tom_registration URLconf in your projecturls.py. You will need to ensure that this urlpattern appears in the list before yourtom_common.urls.Open Registration:```python
    urlpatterns = [
        ...
        path('', include('tom_registration.registration_flows.open.urls', namespace='registration')),
    ]
```Approval Registration:```python
    urlpatterns = [
        ...
        path('', include('tom_registration.registration_flows.approval_required.urls', namespace='registration')),
    ]
```While the registration views are now accessible directly, some changes need to be made to templates to make them available.Copy the contents ofthis filetotemplates/tom_common/partials/navbar_login.html.If you're using approval registration, copy the contents ofthis filetotemplates/auth/user_list.html.If you're using approval registration and you would like a message informing the user that their account is pending approval if they try to log in prior to approval, you'll need to make the following changes:First, in yoursettings.py, set the first item of yourAUTHENTICATION_BACKENDS:```python
AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.AllowAllUsersModelBackend',
    'guardian.backends.ObjectPermissionBackend'
)
```Then, change the value ofREGISTRATION_AUTHENTICATION_BACKENDin theTOM_REGISTRATIONsetting that was just created:```python
TOM_REGISTRATION = {
    'REGISTRATION_AUTHENTICATION_BACKEND': 'django.contrib.auth.backends.AllowAllUsersModelBackend`,
    ...
}
```EmailIn the approval required registration flow, there is available behavior to send basic emails notifying administrators of a registration request, and notifying users of registration approval. Administrators are determined by theDjango MANAGERS setting. Email behavior can be enabled or disabled withSEND_APPROVAL_EMAILS.The configuration of an email backend is a topic covered in depth by theDjango docs. There are a number of required settings that will need to be added.In the future,tom_registrationwill provide more configurable behavior upon user registration/approval.Running the testsIn order to run the tests, run the following in your virtualenv:python manage.py test