Esempio n. 1
0
def register(request, template_name="profiles/register.html"):
    context = {
        'recaptcha_key': settings.GOOGLE_RECAPTCHA_PUBLIC_KEY,
    }
    if request.method == 'POST':
        context['full_name'] = request.POST.get('full_name')
        context['username'] = request.POST.get('username')
        context['email'] = request.POST.get('email')
        context['password'] = request.POST.get('password')
        context['accept_terms'] = (request.POST.get('accept_terms') == 'on')

        if not context['accept_terms']:
            context['register_status'] = 'invalid_terms'
        elif not request.recaptcha_is_valid:
            context['register_status'] = 'invalid_recaptcha'
        elif User.objects.filter(username=context['username']).count() != 0:
            context['register_status'] = 'username_taken'
        elif User.objects.filter(email=context['email']).count() != 0:
            context['register_status'] = 'email_taken'
        elif not is_valid_full_name(context['full_name']):
            context['register_status'] = 'invalid_full_name'
        elif not is_valid_username(context['username']):
            context['register_status'] = 'invalid_username'
        elif not is_valid_email(context['email']):
            context['register_status'] = 'invalid_email'
        elif not is_valid_password(context['password']):
            context['register_status'] = 'invalid_password'
        else:
            with transaction.atomic():
                user = User()
                user.username = context['username']
                user.set_password(context['password'])
                user.save()

                group, created = Group.objects.get_or_create(name='DOCTOR_GROUP')
                user.groups.add(group)

                avatar_filename = user.username + "_avatar.svg"
                avatar_media_path = media_file_path(user, avatar_filename)
                avatar_system_path = os.path.join(settings.MEDIA_ROOT, avatar_media_path)
                if not os.path.exists(os.path.dirname(avatar_system_path)):
                    os.makedirs(os.path.dirname(avatar_system_path))

                avatar_generator_url = \
                    settings.AVATAR_PROVIDER + '{0}?theme=berrypie&numcolors=4&size=220&fmt=svg' \
                    .format(avatar_filename)

                urllib.request.urlretrieve(avatar_generator_url, avatar_system_path)

                profile = Profile()
                profile.full_name = context['full_name']
                profile.user = user
                profile.email = context['email']
                profile.avatar = avatar_media_path
                profile.save()
                context['register_status'] = 'registered'
            
            login(request, user, backend='django.contrib.auth.backends.ModelBackend')
            return HttpResponseRedirect(reverse('home'))
    else:
        context['register_status'] = 'registering'
    return render_with_context(request, template_name, context)