]> git.datanom.net - flask-test.git/blame - app/views.py
First half
[flask-test.git] / app / views.py
CommitLineData
db4f0ba9
MR
1from flask import render_template, flash, redirect, session, url_for, request, g
2from flask_login import login_user, logout_user, current_user, login_required
3from datetime import datetime
4from app import app, db, lm, oid
5from .forms import LoginForm, EditForm
6from .models import User
7
8
9@lm.user_loader
10def load_user(id):
11 return User.query.get(int(id))
12
13
14@app.before_request
15def before_request():
16 g.user = current_user
17 if g.user.is_authenticated:
18 g.user.last_seen = datetime.utcnow()
19 db.session.add(g.user)
20 db.session.commit()
21
22
23@app.errorhandler(404)
24def not_found_error(error):
25 return render_template('404.html'), 404
26
27
28@app.errorhandler(500)
29def internal_error(error):
30 db.session.rollback()
31 return render_template('500.html'), 500
32
43064c75
MR
33
34@app.route('/')
35@app.route('/index')
db4f0ba9 36@login_required
43064c75 37def index():
db4f0ba9
MR
38 user = g.user
39 posts = [
40 {
41 'author': {'nickname': 'John'},
42 'body': 'Beautiful day in Portland!'
43 },
44 {
45 'author': {'nickname': 'Susan'},
46 'body': 'The Avengers movie was so cool!'
47 }
48 ]
49 return render_template('index.html',
50 title='Home',
51 user=user,
52 posts=posts)
53
54
55@app.route('/login', methods=['GET', 'POST'])
56@oid.loginhandler
57def login():
58 if g.user is not None and g.user.is_authenticated:
59 return redirect(url_for('index'))
60 form = LoginForm()
61 if form.validate_on_submit():
62 session['remember_me'] = form.remember_me.data
63 return oid.try_login(form.openid.data, ask_for=['nickname', 'email'])
64 return render_template('login.html',
65 title='Sign In',
66 form=form,
67 providers=app.config['OPENID_PROVIDERS'])
68
69
70@oid.after_login
71def after_login(resp):
72 if resp.email is None or resp.email == "":
73 flash('Invalid login. Please try again.')
74 return redirect(url_for('login'))
75 user = User.query.filter_by(email=resp.email).first()
76 if user is None:
77 nickname = resp.nickname
78 if nickname is None or nickname == "":
79 nickname = resp.email.split('@')[0]
80 nickname = User.make_unique_nickname(nickname)
81 user = User(nickname=nickname, email=resp.email)
82 db.session.add(user)
83 db.session.commit()
84 remember_me = False
85 if 'remember_me' in session:
86 remember_me = session['remember_me']
87 session.pop('remember_me', None)
88 login_user(user, remember=remember_me)
89 return redirect(request.args.get('next') or url_for('index'))
90
91
92@app.route('/logout')
93def logout():
94 logout_user()
95 return redirect(url_for('login'))
96
97
98@app.route('/user/<nickname>')
99@login_required
100def user(nickname):
101 user = User.query.filter_by(nickname=nickname).first()
102 if user is None:
103 flash('User %s not found.' % nickname)
104 return redirect(url_for('index'))
105 posts = [
106 {'author': user, 'body': 'Test post #1'},
107 {'author': user, 'body': 'Test post #2'}
108 ]
109 return render_template('user.html',
110 user=user,
111 posts=posts)
112
113
114@app.route('/edit', methods=['GET', 'POST'])
115@login_required
116def edit():
117 form = EditForm(g.user.nickname)
118 if form.validate_on_submit():
119 g.user.nickname = form.nickname.data
120 g.user.about_me = form.about_me.data
121 db.session.add(g.user)
122 db.session.commit()
123 flash('Your changes have been saved.')
124 return redirect(url_for('edit'))
125 elif request.method != "POST":
126 form.nickname.data = g.user.nickname
127 form.about_me.data = g.user.about_me
128 return render_template('edit.html', form=form)
129
This page took 0.045971 seconds and 5 git commands to generate.