def create_new_observer(self, email, name, surname, affiliation, password): """ Create a new, inactive ``Observer``, generates a ``profile`` and emails its activation key, returning the new ``Observer``. """ new_observer = RegisteredObserver() user = User() user.email = email user.username = email user.is_active = False new_observer.name = name new_observer.surname = surname user.name = name + surname new_observer.affiliation = affiliation user.set_password(password) new_observer.set_password(password) new_observer.approved = False new_observer.registration_confirmed = False sha1 = hashlib.sha1() sha1.update(str(random.random())) salt = sha1.hexdigest()[:5] sha1 = hashlib.sha1() sha1.update(salt.encode('ascii', 'ignore') + email.encode('ascii', 'ignore') + name.encode('ascii', 'ignore') + affiliation.encode('ascii', 'ignore')) new_observer.activation_key = sha1.hexdigest() user.save() new_observer.user = user new_observer.save() from django.core.mail import send_mail subject = "Registration activation request for NZDIS: Tobacco Free" # Email subject *must not* contain newlines subject = ''.join(subject.splitlines()) message = render_to_string('activation_email.txt', { 'activation_key': new_observer.activation_key, 'name': new_observer.name, }) logger.debug("Trying to email this:\n" + message) try: send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [new_observer.user.email]) except: pass # TODO what should we do if the email connection fails? # should never happen on the server return new_observer