Skip to content
This repository was archived by the owner on Jul 20, 2024. It is now read-only.

Commit 503960d

Browse files
committed
Added 'flash-wtf'
1 parent 6c02f2a commit 503960d

File tree

7 files changed

+95
-16
lines changed

7 files changed

+95
-16
lines changed

app/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,8 @@
22

33

44
app = Flask(__name__)
5+
app.config.from_object('config')
6+
7+
58
from app import views # avoids circular import errors when put at the end 'cos the `views` also import `app`
69

app/forms.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from flask_wtf import Form
2+
from wtforms import StringField, BooleanField, validators
3+
4+
5+
class LoginForm(Form):
6+
openid = StringField('openid', [validators.DataRequired()])
7+
remember_me = BooleanField('remember_me', default=False)

app/templates/base.html

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,17 @@
99
{% endif %}
1010
</head>
1111
<body>
12-
<div>J's blog: <a href="/index">Home</a></div>
12+
<div>J's blog: <a href="/index">Home</a> <a href="/login">Login</a></div>
1313
<hr>
14+
{% with messages = get_flashed_messages() %}
15+
{% if messages %}
16+
<ul>
17+
{% for message in messages %}
18+
<li>{{ message }} </li>
19+
{% endfor %}
20+
</ul>
21+
{% endif %}
22+
{% endwith %}
1423
{% block content %}{% endblock %}
1524
</body>
1625
</html>

app/templates/index.html

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
{% extends 'base.html' %}
2+
23
{% block content %}
34
<h1>Hello, {{ user.nickname }}!</h1>
45
<table border="1">
5-
<thead>
6-
<tr>
7-
<th>Author</th>
8-
<th>Post</th>
9-
</tr>
10-
</thead>
11-
<tbody>
6+
<thead>
7+
<tr>
8+
<th>Author</th>
9+
<th>Post</th>
10+
</tr>
11+
</thead>
12+
<tbody>
1213
{% for post in posts %}
13-
<tr>
14-
<td>{{ post.author.nickname }}</td>
15-
<td>{{ post.post }}</td>
16-
</tr>
14+
<tr>
15+
<td>{{ post.author.nickname }}</td>
16+
<td>{{ post.post }}</td>
17+
</tr>
1718
{% endfor %}
18-
</tbody>
19+
</tbody>
1920
</table>
2021
{% endblock %}

app/templates/login.html

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<!-- extend from base layout -->
2+
{% extends "base.html" %}
3+
4+
{% block content %}
5+
<script type="text/javascript">
6+
function set_openid(openid, pr)
7+
{
8+
u = openid.search('<username>')
9+
if (u != -1) {
10+
// openid requires username
11+
user = prompt('Enter your ' + pr + ' username:')
12+
openid = openid.substr(0, u) + user
13+
}
14+
form = document.forms['login'];
15+
form.elements['openid'].value = openid
16+
}
17+
</script>
18+
<h1>Sign In</h1>
19+
<form action="" method="post" name="login">
20+
{{ form.hidden_tag() }}
21+
<p>
22+
Please enter your OpenID, or select one of the providers below:<br>
23+
{{ form.openid(size=80) }}<br>
24+
{% for error in form.openid.errors %}
25+
<span style="color: red;">[{{ error }}]</span>
26+
{% endfor %}<br>
27+
|{% for pr in providers %}
28+
<a href="javascript:set_openid('{{ pr.url }}', '{{ pr.name }}');">{{ pr.name }}</a> |
29+
{% endfor %}
30+
</p>
31+
<p>{{ form.remember_me }} Remember Me</p>
32+
<p><input type="submit" value="Sign In"></p>
33+
</form>
34+
{% endblock %}

app/views.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from app import app
2-
from flask import render_template
2+
from flask import render_template, flash, redirect
3+
from .forms import LoginForm
34

45

56
@app.route('/')
@@ -12,11 +13,26 @@ def index():
1213
'post': 'This movie is awesome'
1314
},
1415
{
15-
'author': {'nickname': 'Mary'},
16-
'post': 'The match was a draw'
16+
'author': {'nickname': 'Ekuba'},
17+
'post': 'The best girl'
1718
}
1819
]
1920
return render_template('index.html',
2021
title='Home',
2122
user=user,
2223
posts=posts)
24+
25+
26+
@app.route('/login', methods=['GET', 'POST'])
27+
def login():
28+
form = LoginForm()
29+
30+
if form.validate_on_submit():
31+
flash('Login requested for OpenID="%s", remember_me=%s' %
32+
(form.openid.data, str(form.remember_me.data)))
33+
return redirect('/index')
34+
35+
return render_template('login.html',
36+
title='Sign In',
37+
form=form,
38+
providers=app.config['OPENID_PROVIDERS'])

config.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
WTF_CSRF_ENABLED = True
2+
SECRET_KEY = '1qaz@WSX'
3+
4+
OPENID_PROVIDERS = [
5+
{'name': 'Google', 'url': 'https://www.google.com/accounts/o8/id'},
6+
{'name': 'Yahoo', 'url': 'https://me.yahoo.com'},
7+
{'name': 'AOL', 'url': 'http://openid.aol.com/<username>'},
8+
{'name': 'Flickr', 'url': 'http://www.flickr.com/<username>'},
9+
{'name': 'MyOpenID', 'url': 'https://www.myopenid.com'}]

0 commit comments

Comments
 (0)