This repository was archived by the owner on Jul 20, 2024. It is now read-only.
File tree 7 files changed +95
-16
lines changed 7 files changed +95
-16
lines changed Original file line number Diff line number Diff line change 2
2
3
3
4
4
app = Flask (__name__ )
5
+ app .config .from_object ('config' )
6
+
7
+
5
8
from app import views # avoids circular import errors when put at the end 'cos the `views` also import `app`
6
9
Original file line number Diff line number Diff line change
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 )
Original file line number Diff line number Diff line change 9
9
{% endif %}
10
10
</ head >
11
11
< 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 >
13
13
< 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 %}
14
23
{% block content %}{% endblock %}
15
24
</ body >
16
25
</ html >
Original file line number Diff line number Diff line change 1
1
{% extends 'base.html' %}
2
+
2
3
{% block content %}
3
4
< h1 > Hello, {{ user.nickname }}!</ h1 >
4
5
< 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 >
12
13
{% 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 >
17
18
{% endfor %}
18
- </ tbody >
19
+ </ tbody >
19
20
</ table >
20
21
{% endblock %}
Original file line number Diff line number Diff line change
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 %}
Original file line number Diff line number Diff line change 1
1
from app import app
2
- from flask import render_template
2
+ from flask import render_template , flash , redirect
3
+ from .forms import LoginForm
3
4
4
5
5
6
@app .route ('/' )
@@ -12,11 +13,26 @@ def index():
12
13
'post' : 'This movie is awesome'
13
14
},
14
15
{
15
- 'author' : {'nickname' : 'Mary ' },
16
- 'post' : 'The match was a draw '
16
+ 'author' : {'nickname' : 'Ekuba ' },
17
+ 'post' : 'The best girl '
17
18
}
18
19
]
19
20
return render_template ('index.html' ,
20
21
title = 'Home' ,
21
22
user = user ,
22
23
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' ])
Original file line number Diff line number Diff line change
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' }]
You can’t perform that action at this time.
0 commit comments