1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
import datetime
from flask import request, redirect, url_for, render_template, flash
from flask_peewee.utils import get_object_or_404, object_list
from app import app
from auth import auth
from models import User, Message, Relationship
@app.route('/')
def homepage():
if auth.get_logged_in_user():
return private_timeline()
else:
return public_timeline()
@app.route('/private/')
@auth.login_required
def private_timeline():
user = auth.get_logged_in_user()
messages = Message.select().where(
Message.user << user.following()
).order_by(Message.pub_date.desc())
return object_list('private_messages.html', messages, 'message_list')
@app.route('/public/')
def public_timeline():
messages = Message.select().order_by(Message.pub_date.desc())
return object_list('public_messages.html', messages, 'message_list')
@app.route('/join/', methods=['GET', 'POST'])
def join():
if request.method == 'POST' and request.form['username']:
try:
user = User.select().where(User.username==request.form['username']).get()
flash('That username is already taken')
except User.DoesNotExist:
user = User(
username=request.form['username'],
email=request.form['email'],
join_date=datetime.datetime.now()
)
user.set_password(request.form['password'])
user.save()
auth.login_user(user)
return redirect(url_for('homepage'))
return render_template('join.html')
@app.route('/following/')
@auth.login_required
def following():
user = auth.get_logged_in_user()
return object_list('user_following.html', user.following(), 'user_list')
@app.route('/followers/')
@auth.login_required
def followers():
user = auth.get_logged_in_user()
return object_list('user_followers.html', user.followers(), 'user_list')
@app.route('/users/')
def user_list():
users = User.select().order_by(User.username)
return object_list('user_list.html', users, 'user_list')
@app.route('/users/<username>/')
def user_detail(username):
user = get_object_or_404(User, User.username==username)
messages = user.message_set.order_by(Message.pub_date.desc())
return object_list('user_detail.html', messages, 'message_list', person=user)
@app.route('/users/<username>/follow/', methods=['POST'])
@auth.login_required
def user_follow(username):
user = get_object_or_404(User, User.username==username)
Relationship.get_or_create(
from_user=auth.get_logged_in_user(),
to_user=user,
)
flash('You are now following %s' % user.username)
return redirect(url_for('user_detail', username=user.username))
@app.route('/users/<username>/unfollow/', methods=['POST'])
@auth.login_required
def user_unfollow(username):
user = get_object_or_404(User, User.username==username)
Relationship.delete().where(
Relationship.from_user==auth.get_logged_in_user(),
Relationship.to_user==user,
).execute()
flash('You are no longer following %s' % user.username)
return redirect(url_for('user_detail', username=user.username))
@app.route('/create/', methods=['GET', 'POST'])
@auth.login_required
def create():
user = auth.get_logged_in_user()
if request.method == 'POST' and request.form['content']:
message = Message.create(
user=user,
content=request.form['content'],
)
flash('Your message has been created')
return redirect(url_for('user_detail', username=user.username))
return render_template('create.html')
@app.route('/edit/<int:message_id>/', methods=['GET', 'POST'])
@auth.login_required
def edit(message_id):
user = auth.get_logged_in_user()
message = get_object_or_404(Message, Message.user==user, Message.id==message_id)
if request.method == 'POST' and request.form['content']:
message.content = request.form['content']
message.save()
flash('Your changes were saved')
return redirect(url_for('user_detail', username=user.username))
return render_template('edit.html', message=message)
|