Chapter 3: Web Forms (v0.3)
This commit is contained in:
parent
538d8ab9a3
commit
0413d653d8
|
@ -1,5 +1,7 @@
|
|||
from flask import Flask
|
||||
from config import Config
|
||||
|
||||
app = Flask(__name__)
|
||||
app.config.from_object(Config)
|
||||
|
||||
from app import routes
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
from flask_wtf import FlaskForm
|
||||
from wtforms import StringField, PasswordField, BooleanField, SubmitField
|
||||
from wtforms.validators import DataRequired
|
||||
|
||||
|
||||
class LoginForm(FlaskForm):
|
||||
username = StringField('Username', validators=[DataRequired()])
|
||||
password = PasswordField('Password', validators=[DataRequired()])
|
||||
remember_me = BooleanField('Remember Me')
|
||||
submit = SubmitField('Sign In')
|
|
@ -1,5 +1,6 @@
|
|||
from flask import render_template
|
||||
from flask import render_template, flash, redirect, url_for
|
||||
from app import app
|
||||
from app.forms import LoginForm
|
||||
|
||||
|
||||
@app.route('/')
|
||||
|
@ -17,3 +18,13 @@ def index():
|
|||
}
|
||||
]
|
||||
return render_template('index.html', title='Home', user=user, posts=posts)
|
||||
|
||||
|
||||
@app.route('/login', methods=['GET', 'POST'])
|
||||
def login():
|
||||
form = LoginForm()
|
||||
if form.validate_on_submit():
|
||||
flash('Login requested for user {}, remember_me={}'.format(
|
||||
form.username.data, form.remember_me.data))
|
||||
return redirect(url_for('index'))
|
||||
return render_template('login.html', title='Sign In', form=form)
|
||||
|
|
|
@ -7,8 +7,21 @@
|
|||
{% endif %}
|
||||
</head>
|
||||
<body>
|
||||
<div>Microblog: <a href="/index">Home</a></div>
|
||||
<div>
|
||||
Microblog:
|
||||
<a href="{{ url_for('index') }}">Home</a>
|
||||
<a href="{{ url_for('login') }}">Login</a>
|
||||
</div>
|
||||
<hr>
|
||||
{% with messages = get_flashed_messages() %}
|
||||
{% if messages %}
|
||||
<ul>
|
||||
{% for message in messages %}
|
||||
<li>{{ message }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
{% block content %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Sign In</h1>
|
||||
<form action="" method="post">
|
||||
{{ form.hidden_tag() }}
|
||||
<p>
|
||||
{{ form.username.label }}<br>
|
||||
{{ form.username(size=32) }}<br>
|
||||
{% for error in form.username.errors %}
|
||||
<span style="color: red;">[{{ error }}]</span>
|
||||
{% endfor %}
|
||||
</p>
|
||||
<p>
|
||||
{{ form.password.label }}<br>
|
||||
{{ form.password(size=32) }}<br>
|
||||
{% for error in form.password.errors %}
|
||||
<span style="color: red;">[{{ error }}]</span>
|
||||
{% endfor %}
|
||||
</p>
|
||||
<p>{{ form.remember_me() }} {{ form.remember_me.label }}</p>
|
||||
<p>{{ form.submit() }}</p>
|
||||
</form>
|
||||
{% endblock %}
|
Loading…
Reference in New Issue