It really depends on the level of customization you want to have.
A registration form could look a bit like repetitive task among different Django projects, and it is considering most of the registration processes require the same basic steps. However, for different projects you may need to extend or exclude certain steps.
This is an example of a view I use for registration:
def register(request):
if request.method == 'POST':
register_form = RegisterForm(request.POST)
if register_form.is_valid():
data = register_form.data
# create user
user = User.objects.create_user(
username=data.get('username'),
email=data.get('email'),
password=data.get('password'),
)
if user is not None:
auth = authenticate(username=data.get('username'), password=data.get('password'))
login(request, auth)
messages.success(request, _('Your new user has been created.'))
return redirect(reverse('home'))
else:
messages.error(request, _('Oops! Error.'))
else:
register_form = RegisterForm()
return render(request, 'accounts/register.html')
This works for almost all my projects. RegisterForm
has all the magic.