def register(): registration_form = RegistrationForm() if current_user.is_authenticated: return redirect(url_for(Action.login)) # redirect if logged in elif request.method == 'GET' and current_user.is_anonymous: return render_template( "register.html", form=registration_form) # display form if not logged in elif request.method == 'POST' and registration_form.validate_on_submit(): # check that username, email are unique (don't exist in db yet) # this is already done by flask-wtf in User model class, most likely when validate_on_submit() is called # if form data not unique, flash error to user and reload "register.html", be ambiguous for security # if form data unique, add user to database, inform them they have successfully registered # all checks specified in this comment block are taken care of by flask-wtf custome validate_field() methods # ...so just add a user new_user = User(username=registration_form.username.data, email=registration_form.email.data) new_user.set_password(registration_form.password.data) db.session.add(new_user) db.session.commit() flash(_(f"Registration success! Welcome {new_user.username}")) return redirect(url_for(Action.login)) elif not registration_form.validate_on_submit( ) and request.method == 'POST': flash(_("Registration failed.")) return render_template("register.html", title=_("Register"), form=registration_form) return "Error in register action" # debugging
def register(): if current_user.is_authenticated: return redirect(url_for('index')) form = RegistrationForm() if form.validate_on_submit(): user = User(username=form.username.data, email=form.email.data) user.set_password(form.password.data) db.session.add(user) db.session.commit() flash(_('Congratulations, you are now a registered user!')) return redirect(url_for('login')) return render_template('register.html', title=_('Register'), form=form)
def reset_password(token): if current_user.is_authenticated: return redirect(url_for('index')) user = User.verify_reset_password_token(token) if not user: return redirect(url_for('index')) form = ResetPasswordForm() if form.validate_on_submit(): user.set_password(form.password.data) db.session.commit() flash(_('Your password has been reset.')) return redirect(url_for('login')) return render_template('reset_password.html', form=form)
def test_follow(self): u1 = User(username='******', email='*****@*****.**') u2 = User(username='******', email='*****@*****.**') db.session.add(u1) db.session.add(u2) db.session.commit() self.assertEqual(u1.followed.all(), []) self.assertEqual(u1.followers.all(), []) u1.follow(u2) db.session.commit() self.assertTrue(u1.is_following(u2)) self.assertEqual(u1.followed.count(), 1) self.assertEqual(u1.followed.first().username, 'testuser1') self.assertEqual(u2.followers.count(), 1) self.assertEqual(u2.followers.first().username, 'testuser2') u1.unfollow(u2) db.session.commit() self.assertFalse(u1.is_following(u2)) self.assertEqual(u1.followed.count(), 0) self.assertEqual(u2.followers.count(), 0)
def test_follow(self): u1 = User(username='******', email='*****@*****.**') u2 = User(username='******', email='*****@*****.**') db.session.add(u1) db.session.add(u2) db.session.commit() self.assertEqual(u1.followed.all(), []) self.assertEqual(u1.followers.all(), []) u1.follow(u2) db.session.commit() self.assertTrue(u1.is_following(u2)) self.assertEqual(u1.followed.count(), 1) self.assertEqual(u1.followed.first().username, 'susan') self.assertEqual(u2.followers.count(), 1) self.assertEqual(u2.followers.first().username, 'john') u1.unfollow(u2) db.session.commit() self.assertFalse(u1.is_following(u2)) self.assertEqual(u1.followed.count(), 0) self.assertEqual(u2.followers.count(), 0)
def reset_password(token): if current_user.is_authenticated: return redirect(url_for(Action.index)) user = User.verify_reset_password_token( token) # gets a user or returns None if not user: flash(_("User not found!")) return redirect(Action.register) form = ResetPasswordForm() if form.validate_on_submit(): user.set_password(form.password.data) db.session.commit() flash(_("Your password has been reset.")) return redirect(url_for(Action.login)) return render_template("reset_password.html", title=_("Reset Your Password"), form=form)
def test_follow_posts(self): u1 = User(username='******', email='*****@*****.**') u2 = User(username='******', email='*****@*****.**') u3 = User(username='******', email='*****@*****.**') u4 = User(username='******', email='*****@*****.**') db.session.add_all([u1, u2, u3, u4]) now = datetime.utcnow() p1 = Post(body="post from testuser2", author=u1, timestamp=now + timedelta(seconds=1)) p2 = Post(body="post from testuser1", author=u2, timestamp=now + timedelta(seconds=4)) p3 = Post(body="post from testuser3", author=u3, timestamp=now + timedelta(seconds=3)) p4 = Post(body="post from testuser4", author=u4, timestamp=now + timedelta(seconds=2)) db.session.add_all([p1, p2, p3, p4]) db.session.commit() u1.follow(u2) u1.follow(u4) u2.follow(u3) u3.follow(u4) db.session.commit() f1 = u1.followed_posts().all() f2 = u2.followed_posts().all() f3 = u3.followed_posts().all() f4 = u4.followed_posts().all() self.assertEqual(f1, [p2, p4, p1]) self.assertEqual(f2, [p2, p3]) self.assertEqual(f3, [p3, p4]) self.assertEqual(f4, [p4])
def test_password_hashing(self): u = User(username='******') u.set_password('pass') self.assertFalse(u.check_password('1234')) self.assertTrue(u.check_password('pass'))
def test_follow_posts(self): # create four users u1 = User(username='******', email='*****@*****.**') u2 = User(username='******', email='*****@*****.**') u3 = User(username='******', email='*****@*****.**') u4 = User(username='******', email='*****@*****.**') db.session.add_all([u1, u2, u3, u4]) # create four posts now = datetime.utcnow() p1 = Post(body="post from john", author=u1, timestamp=now + timedelta(seconds=1)) p2 = Post(body="post from susan", author=u2, timestamp=now + timedelta(seconds=4)) p3 = Post(body="post from mary", author=u3, timestamp=now + timedelta(seconds=3)) p4 = Post(body="post from david", author=u4, timestamp=now + timedelta(seconds=2)) db.session.add_all([p1, p2, p3, p4]) db.session.commit() # setup the followers u1.follow(u2) # john follows susan u1.follow(u4) # john follows david u2.follow(u3) # susan follows mary u3.follow(u4) # mary follows david db.session.commit() # check the followed posts of each user f1 = u1.followed_posts().all() f2 = u2.followed_posts().all() f3 = u3.followed_posts().all() f4 = u4.followed_posts().all() self.assertEqual(f1, [p2, p4, p1]) self.assertEqual(f2, [p2, p3]) self.assertEqual(f3, [p3, p4]) self.assertEqual(f4, [p4])
def test_avatar(self): u = User(username='******', email='*****@*****.**') self.assertEqual(u.avatar(128), ('https://www.gravatar.com/avatar/' 'd4c74594d841139328695756648b6bd6' '?d=identicon&s=128'))
def test_password_hashing(self): u = User(username='******') u.set_password('cat') self.assertFalse(u.check_password('dog')) self.assertTrue(u.check_password('cat'))