Flask User Registration Login Function Implementation Guide

Steps and code logic for implementing user registration and login function in Flask project

Implementing user registration and login functions in a Flask project usually involves the following steps and code logic:

1. Environmental preparation

  • Install Flask: pip install Flask
  • Install Flask-SQLAlchemy: pip install Flask-SQLAlchemy (for database operations)
  • Install Flask-WTF: pip install Flask-WTF (for form processing)
  • Install Flask-Login: pip install Flask-Login (used to manage user sessions)

2. Initialize Flask applications and configurations

1
2
3
4
5
6
7
8
9
10
11
12
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)

login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'

3. Create a user model

1
2
3
4
5
6
7
8
9
from flask_login import UserMixin

class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(100), unique=True, nullable=False)
password = db.Column(db.String(100), nullable=False)

def __repr__(self):
return '<User %r>' % self.username

4. Create user registration and login forms

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length, EqualTo, ValidationError

class RegistrationForm(FlaskForm):
username = StringField('Username', validators=[DataRequired(), Length(min=4, max=25)])
password = PasswordField('Password', validators=[DataRequired()])
confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
submit = SubmitField('Sign Up')

def validate_username(self, username):
user = User.query.filter_by(username=username.data).first()
if user:
raise ValidationError('That username is taken. Please choose a different one.')

class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired(), Length(min=4, max=25)])
password = PasswordField('Password', validators=[DataRequired()])
submit = SubmitField('Login')

5. User registration and login view

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from flask import render_template, url_for, redirect, request, flash
from werkzeug.security import generate_password_hash, check_password_hash

@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegistrationForm()
if form.validate_on_submit():
hashed_password = generate_password_hash(form.password.data)
user = User(username=form.username.data, password=hashed_password)
db.session.add(user)
db.session.commit()
flash('Your account has been created! You are now able to log in', 'success')
return redirect(url_for('login'))
return render_template('register.html', title='Register', form=form)

@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user and check_password_hash(user.password, form.password.data):
login_user(user)
return redirect(url_for('dashboard'))
else:
flash('Login Unsuccessful. Please check username and password', 'danger')
return render_template('login.html', title='Login', form=form)

@app.route('/dashboard')
@login_required
def dashboard():
return 'Welcome to the Dashboard!'

6. User load callback

1
2
3
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))

7. Create a database

1
2
with app.app_context():
db.create_all()

8. Run the Flask app

1
2
if __name__ == '__main__':
app.run(debug=True)

This is a basic user registration and login function implementation. You need to create the corresponding HTML template files (such as register.html and login.html) to render the form. These steps and code logic provide a basic user authentication system that can be expanded and modified according to specific needs.