Difference between revisions of "Login and Logout in a Flask App"

From TRCCompSci - AQA Computer Science
Jump to: navigation, search
(Create forms.py)
(Create a login view)
Line 63: Line 63:
 
from app.forms import LoginForm
 
from app.forms import LoginForm
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
Now create a route or view for the login:
  
 
<syntaxhighlight lang=python>
 
<syntaxhighlight lang=python>
@app.route('/login')
+
@app.route('/login', methods=['GET', 'POST'])
 
def login():
 
def login():
 
     form = LoginForm()
 
     form = LoginForm()
 +
    if form.validate_on_submit():
 +
        return redirect('/index')
 
     return render_template('login.html', title='Sign In', form=form)
 
     return render_template('login.html', title='Sign In', form=form)
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
At the moment the form doesn't check the login details, for this we are going to need to create a database table for users. Several options exist for this connection and can be found here ([Connecting sqlite to Flask Web App| sqlite] , [Connecting MySQL to Flask Web App| MySql]

Revision as of 11:53, 21 October 2019

If you created your Flask Web App following the wiki tutorials, and you downloaded the zip file and extracted it into the 'site-packages' folder you will already have 'flask-wtf' installed and ready to go. If not then you need to install 'flask-wtf' using pip.

Setting Secret Key

You need to find the 'py' file which includes this code:

from flask import Flask
app = Flask(__name__)

And add the following to set the secret key:

app.config['SECRET_KEY'] = 'secret key'

Create forms.py

In the root folder of your project, create a new file called 'forms.py'.

Now add the following code:

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    submit = SubmitField('Sign In')

This will import the required modules to create a login form. The LoginForm class contains the fields to display on the form. It its important to note the 'DataRequired' validators.

Create a template

My WebApp was created using Visual Studio, and it already created a 'layout' template and then separate 'html' files for each page. If you already have templates set up you should copy one of the 'html' files for a page and edit it to this:

{% extends "layout.html" %}

{% block content %}
    <h1>Sign In</h1>
    <form action="" method="post" novalidate>
        {{ form.hidden_tag() }}
        <p>
            {{ form.username.label }}<br>
            {{ form.username(size=32) }}
        </p>
        <p>
            {{ form.password.label }}<br>
            {{ form.password(size=32) }}
        </p>
        <p>{{ form.remember_me() }} {{ form.remember_me.label }}</p>
        <p>{{ form.submit() }}</p>
    </form>
{% endblock %}

Create a login view

Now add the following to the top of your 'views.py' or the 'py' file containing your routes:

from app.forms import LoginForm

Now create a route or view for the login:

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        return redirect('/index')
    return render_template('login.html', title='Sign In', form=form)

At the moment the form doesn't check the login details, for this we are going to need to create a database table for users. Several options exist for this connection and can be found here ([Connecting sqlite to Flask Web App| sqlite] , [Connecting MySQL to Flask Web App| MySql]