Flask Training , study and exam guide
1 Introduction to Flask
1.1 What is Flask?
1.2 History and Evolution of Flask
1.3 Flask vs Django
1.4 Setting Up the Development Environment
2 Flask Basics
2.1 Installing Flask
2.2 Creating Your First Flask Application
2.3 Understanding the Flask Application Structure
2.4 Routing in Flask
2.5 Variable Rules in Routing
2.6 HTTP Methods (GET, POST, PUT, DELETE)
3 Templates and Static Files
3.1 Introduction to Jinja2 Templates
3.2 Rendering Templates
3.3 Template Inheritance
3.4 Static Files (CSS, JavaScript, Images)
3.5 Using Bootstrap with Flask
4 Forms and User Input
4.1 Introduction to Flask-WTF
4.2 Creating Forms with Flask-WTF
4.3 Validating User Input
4.4 Handling File Uploads
4.5 Flash Messages
5 Databases with Flask
5.1 Introduction to SQLAlchemy
5.2 Setting Up a Database
5.3 Defining Models
5.4 CRUD Operations with SQLAlchemy
5.5 Relationships in SQLAlchemy
5.6 Migrations with Flask-Migrate
6 Authentication and Authorization
6.1 Introduction to Flask-Login
6.2 User Authentication
6.3 Protecting Routes with Login Required
6.4 User Roles and Permissions
6.5 Password Hashing with Werkzeug
7 RESTful APIs with Flask
7.1 Introduction to RESTful APIs
7.2 Creating a RESTful API with Flask
7.3 Serializing and Deserializing Data
7.4 Handling API Errors
7.5 Authentication for APIs
8 Testing Flask Applications
8.1 Introduction to Unit Testing
8.2 Writing Tests with Flask-Testing
8.3 Testing Routes and Views
8.4 Testing Database Interactions
8.5 Continuous Integration with Flask
9 Deployment and Scaling
9.1 Introduction to Deployment
9.2 Deploying Flask Applications on Heroku
9.3 Deploying Flask Applications on AWS
9.4 Scaling Flask Applications
9.5 Load Balancing and Caching
10 Advanced Topics
10.1 Background Tasks with Celery
10.2 WebSockets with Flask-SocketIO
10.3 Internationalization and Localization
10.4 Custom Error Pages
10.5 Extending Flask with Blueprints
11 Exam Preparation
11.1 Review of Key Concepts
11.2 Practice Questions
11.3 Mock Exams
11.4 Tips for the Exam Day
Flash Messages in Flask

Flash Messages in Flask

Key Concepts

Flash Messages

Flash messages are temporary messages stored in the session that are displayed to the user once and then discarded. They are commonly used to provide feedback after form submissions, redirects, or other user interactions.

Setting Flash Messages

To set a flash message, you use the flash() function from the Flask library. This function takes two arguments: the message to be displayed and an optional category (e.g., 'success', 'error', 'info').

from flask import Flask, flash, redirect, url_for

app = Flask(__name__)
app.secret_key = 'secret'

@app.route('/submit', methods=['POST'])
def submit():
    flash('Form submitted successfully!', 'success')
    return redirect(url_for('home'))
    

Displaying Flash Messages

To display flash messages in your templates, you use the get_flashed_messages() function. This function retrieves all the flash messages stored in the session and removes them afterward.

<ul>
    {% for message in get_flashed_messages() %}
        <li>{{ message }}</li>
    {% endfor %}
</ul>
    

Categories for Flash Messages

Flash messages can be categorized to allow for different styling or handling based on the type of message. Categories are specified when setting the flash message and can be retrieved when displaying them.

from flask import Flask, flash, redirect, url_for

app = Flask(__name__)
app.secret_key = 'secret'

@app.route('/submit', methods=['POST'])
def submit():
    flash('Form submitted successfully!', 'success')
    flash('There was an error processing your request.', 'error')
    return redirect(url_for('home'))
    
<ul>
    {% for category, message in get_flashed_messages(with_categories=true) %}
        <li class="{{ category }}">{{ message }}</li>
    {% endfor %}
</ul>
    

Using Flash Messages in Templates

Flash messages are typically displayed at the top of the page or in a designated area. You can use CSS to style the messages based on their categories, making it easier for users to understand the feedback.

<style>
    .success { color: green; }
    .error { color: red; }
</style>

<ul>
    {% for category, message in get_flashed_messages(with_categories=true) %}
        <li class="{{ category }}">{{ message }}</li>
    {% endfor %}
</ul>