X-Git-Url: http://git.datanom.net/flask-test.git/blobdiff_plain/db4f0ba9d4aec596f179335f1d86b3dd2bb206c6..163c4d87c8cefd45e8c8836daa28c53956be1e1a:/app/views.py diff --git a/app/views.py b/app/views.py index e00bb0d..7017bd5 100644 --- a/app/views.py +++ b/app/views.py @@ -2,15 +2,15 @@ from flask import render_template, flash, redirect, session, url_for, request, g from flask_login import login_user, logout_user, current_user, login_required from datetime import datetime from app import app, db, lm, oid -from .forms import LoginForm, EditForm -from .models import User - +from .forms import LoginForm, EditForm, PostForm +from .models import User, Post +from config import POSTS_PER_PAGE +from .emails import follower_notification @lm.user_loader def load_user(id): return User.query.get(int(id)) - @app.before_request def before_request(): g.user = current_user @@ -31,24 +31,23 @@ def internal_error(error): return render_template('500.html'), 500 -@app.route('/') -@app.route('/index') +@app.route('/', methods=['GET', 'POST']) +@app.route('/index', methods=['GET', 'POST']) +@app.route('/index/', methods=['GET', 'POST']) @login_required -def index(): - user = g.user - posts = [ - { - 'author': {'nickname': 'John'}, - 'body': 'Beautiful day in Portland!' - }, - { - 'author': {'nickname': 'Susan'}, - 'body': 'The Avengers movie was so cool!' - } - ] +def index(page=1): + form = PostForm() + if form.validate_on_submit(): + post = Post(body=form.post.data, timestamp=datetime.utcnow(), author=g.user) + db.session.add(post) + db.session.commit() + flash('Your post is now live!') + app.logger.info("%s: published a post" % g.user) + return redirect(url_for('index')) + posts = g.user.followed_posts().paginate(page, POSTS_PER_PAGE, False) return render_template('index.html', title='Home', - user=user, + form=form, posts=posts) @@ -79,8 +78,12 @@ def after_login(resp): nickname = resp.email.split('@')[0] nickname = User.make_unique_nickname(nickname) user = User(nickname=nickname, email=resp.email) + app.logger.info("Add: %s - %s" % (nickname, respo.email)) db.session.add(user) db.session.commit() + # make the user follow him/herself + db.session.add(user.follow(user)) + db.session.commit() remember_me = False if 'remember_me' in session: remember_me = session['remember_me'] @@ -91,21 +94,21 @@ def after_login(resp): @app.route('/logout') def logout(): + app.logger.info("Logout: %s" % g.user) logout_user() return redirect(url_for('login')) @app.route('/user/') +@app.route('/user//') @login_required -def user(nickname): +def user(nickname, page=1): user = User.query.filter_by(nickname=nickname).first() if user is None: flash('User %s not found.' % nickname) return redirect(url_for('index')) - posts = [ - {'author': user, 'body': 'Test post #1'}, - {'author': user, 'body': 'Test post #2'} - ] + posts = user.sorted_posts().paginate(page, POSTS_PER_PAGE, False) + app.logger.info("%s: show profile" % user) return render_template('user.html', user=user, posts=posts) @@ -121,9 +124,64 @@ def edit(): db.session.add(g.user) db.session.commit() flash('Your changes have been saved.') + app.logger.info("%s: updated profile" % g.user) return redirect(url_for('edit')) elif request.method != "POST": form.nickname.data = g.user.nickname form.about_me.data = g.user.about_me return render_template('edit.html', form=form) +@app.route('/follow/') +@login_required +def follow(nickname): + user = User.query.filter_by(nickname=nickname).first() + if user is None: + flash('User %s not found.' % nickname) + return redirect(url_for('index')) + if user == g.user: + flash('You can\'t follow yourself!') + return redirect(url_for('user', nickname=nickname)) + u = g.user.follow(user) + if u is None: + flash('Cannot follow ' + nickname + '.') + return redirect(url_for('user', nickname=nickname)) + db.session.add(u) + db.session.commit() + flash('You are now following ' + nickname + '!') + follower_notification(user, g.user) + return redirect(url_for('user', nickname=nickname)) + +@app.route('/unfollow/') +@login_required +def unfollow(nickname): + user = User.query.filter_by(nickname=nickname).first() + if user is None: + flash('User %s not found.' % nickname) + return redirect(url_for('index')) + if user == g.user: + flash('You can\'t unfollow yourself!') + return redirect(url_for('user', nickname=nickname)) + u = g.user.unfollow(user) + if u is None: + flash('Cannot unfollow ' + nickname + '.') + return redirect(url_for('user', nickname=nickname)) + db.session.add(u) + db.session.commit() + flash('You have stopped following ' + nickname + '.') + return redirect(url_for('user', nickname=nickname)) + +@app.route('/delete/') +@login_required +def delete(id): + post = Post.query.get(id) + if post is None: + flash('Post not found.') + return redirect(url_for('index')) + if post.author.id != g.user.id: + flash('You cannot delete this post.') + return redirect(url_for('index')) + db.session.delete(post) + db.session.commit() + flash('Your post has been deleted.') + return redirect(url_for('index')) +