from django.shortcuts import render, reverse, redirect from django.urls import reverse_lazy from django.http import HttpResponseRedirect from django.views.generic.base import TemplateView from django.views.generic.edit import FormView, CreateView, UpdateView, DeleteView from django.views.generic.detail import DetailView from django.views.generic.list import ListView from django.contrib.messages.views import SuccessMessageMixin from django.contrib.auth import authenticate, login from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.forms import PasswordChangeForm from .models import User from .forms import UserCreateForm class AccountCreateView(CreateView, SuccessMessageMixin): model = User template_name = "accounts/account_create_form.html" form_class = UserCreateForm success_message = "Account created. You are now logged in." def get_user(self, uidb64): try: # urlsafe_base64_decode() decodes to bytestring uid = urlsafe_base64_decode(uidb64).decode() user = UserModel._default_manager.get(pk=uid) except ( TypeError, ValueError, OverflowError, UserModel.DoesNotExist, ValidationError, ): user = None return user def form_valid(self, form): self.object = form.save() user = authenticate( self.request, username=form.cleaned_data['email'], password=form.cleaned_data['password1'] ) if user is not None: login(self.request, user) return HttpResponseRedirect(self.get_success_url()) return self.form_invalid(form) def get_success_url(self): return reverse("storefront:customer-detail", kwargs={"pk": self.object.pk})