def sign_up(request): """ Renders the sign up template. Creates a new user and user profile using the POST data provided. It first validates all the provided data. If no error message is returned by the validation function, then the user and user profile are created successfully and user is signed in. Else, the sign up template is rendered with the error message. Also, every time an error occurs, the previous data input by the user is also used while rendering the template (except password). """ user = request.user if user.is_authenticated(): return HttpResponseRedirect('/mytravelog/user/' + user.username + '/') else: data_dict = {} if request.method == "POST": post_data = request.POST file_data = request.FILES first_name = post_data.get('first_name', "") last_name = post_data.get('last_name', "") email = post_data.get('email', "") username = post_data.get('username', "") password = post_data.get('password', "") profile_picture = file_data.get('profile_picture', None) cover_picture = file_data.get('cover_picture', None) # validate user input error = validate_sign_up_form(first_name, last_name, email, username, password, profile_picture, cover_picture) if error is None: # create new user new_user = User() new_user.first_name = first_name new_user.last_name = last_name new_user.email = email new_user.username = username new_user.set_password(password) # encrypt password new_user.save() # create new user profile new_user_profile = UserProfile() new_user_profile.city_count = 0 new_user_profile.country_count = 0 new_user_profile.log_count = 0 if profile_picture is not None: new_user_profile.profile_picture = profile_picture if cover_picture is not None: new_user_profile.cover_picture = cover_picture new_user_profile.user = new_user new_user_profile.save() # now, sign in the user new_user_to_be_signed_in = authenticate(username=username, password=password) login(request, new_user_to_be_signed_in) return HttpResponseRedirect('/mytravelog/user/' + new_user.username + '/') else: data_dict['error'] = error data_dict['previous_post_data'] = post_data return render(request, 'mytravelog/sign_up.html', data_dict)
def add_sample_user_and_user_profile(user_sample_data): user = User() user.username = user_sample_data['username'] user.set_password(user_sample_data['password']) user.first_name = user_sample_data['first_name'] user.last_name = user_sample_data['last_name'] user.email = user_sample_data['email'] user.save() user_profile = UserProfile() user_profile.user = user user_profile.save() return user