Chapter 3: Web Forms (v0.3)
This commit is contained in:
		
							parent
							
								
									95154070d7
								
							
						
					
					
						commit
						fe03296655
					
				| 
						 | 
				
			
			@ -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" novalidate>
 | 
			
		||||
        {{ 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