def login(request, template_name='registration/login.html', redirect_field_name=REDIRECT_FIELD_NAME, authentication_form=AuthenticationForm, current_app=None, extra_context=None): """Displays the login form and handles the login action.""" redirect_to = request.GET.get(redirect_field_name, ) layout_name = "GEMM Log-In and/or Register Screen" error = None if request.method == "POST": # If this is a new user, then we return the registration form. if 'user_action' in request.POST and request.POST[ 'user_action'] == 'register': form = ProfileCreationForm( initial={ 'username': request.POST['username'], 'password1': request.POST['password']} ) return render(request, "registration/register.html", locals()) # Otherwise, assume the user is trying to login. form = authentication_form(data=request.POST) if form.is_valid(): netloc = urlparse(redirect_to)[1] # Use default setting if redirect_to is empty. if not redirect_to: redirect_to = settings.LOGIN_REDIRECT_URL # Do not allow redirection to different host. elif netloc and netloc != request.get_host(): redirect_to = settings.LOGIN_REDIRECT_URL # Okay, security checks complete. Log the user in. auth_login(request, form.get_user()) if request.session.test_cookie_worked(): request.session.delete_test_cookie() return HttpResponseRedirect(redirect_to) error = "invalid username or password" else: form = authentication_form(request) request.session.set_test_cookie() current_site = get_current_site(request) context = { 'error': error, 'form': form, redirect_field_name: redirect_to, 'site': current_site, 'site_name': current_site.name, 'layout_name': layout_name } if extra_context is not None: context.update(extra_context) return TemplateResponse(request, template_name, context)
def post(self, request, *args, **kwargs): """Process the user's registration request.""" postdata = request.POST.copy() form = ProfileCreationForm(postdata) if form.is_valid(): # Save the user information and get a pointer to the User object. user = form.save() # get values for the foreign key values role = Role.objects.get(id=user.userprofile.role_id) sector = Sector.objects.get(id=user.userprofile.sector_id) try: state = State.objects.get(id=user.userprofile.state_id) except BaseException: state = None country = Country.objects.get(id=user.userprofile.country_id) # Send an activation email. request_email_context = { 'APP_NAME': settings.APP_NAME, 'email': settings.EMAIL_HOST_USER, 'domain': request.META['HTTP_HOST'], 'site_name': settings.SITE_NAME, 'uid': urlsafe_base64_encode(force_bytes(user.pk)), 'user': user, 'sector': sector, 'role': role, 'state': state, 'country': country, 'protocol': 'http', } subject = loader.render_to_string( self.admin_subject_template_name, request_email_context) # Email subject *must not* contain newlines subject = ''.join(subject.splitlines()) email = loader.render_to_string( self.admin_email_template_name, request_email_context) # this is driven by local_settings.py send_mail(subject, email, settings.DEFAULT_FROM_EMAIL, settings.USER_APPROVAL_EMAIL, fail_silently=False) # send an email to the user notifying them that the account request is under review user_email_context = { 'APP_NAME': settings.APP_NAME, 'email': user.email } subject = loader.render_to_string( self.user_subject_template_name, user_email_context) # Email subject *must not* contain newlines subject = ''.join(subject.splitlines()) email = loader.render_to_string( self.user_email_template_name, user_email_context) send_mail(subject, email, settings.DEFAULT_FROM_EMAIL, [user.email], fail_silently=False) # render the activation needed template return render(request, self.template_register_inactive, locals()) # pylint: disable=no-member return render(request, self.template_register, locals())
def get(self, request, *args, **kwargs): """Render the user registration template.""" form = ProfileCreationForm() return render(request, self.template_register, {'form': form})