Creating a CRUD application with Flask

Creating a CRUD Application with Flask: A Step-by-Step Guide

Flask is a lightweight Python web framework that has gained immense popularity due to its simplicity and flexibility. One of the most common use cases for Flask is developing a CRUD (Create, Read, Update, Delete) application. In this article, we will walk through the process of creating a basic CRUD application using Flask, covering definitions, use cases, and actionable insights along the way.

What is a CRUD Application?

A CRUD application allows users to perform four basic operations on data:

  • Create: Add new data.
  • Read: Retrieve existing data.
  • Update: Modify existing data.
  • Delete: Remove data.

CRUD applications are essential in web development, as they form the backbone of most data-driven applications. Whether you're building a blog, inventory management system, or a user profile management tool, CRUD functionality is key.

Why Use Flask for Your CRUD Application?

Flask is an excellent choice for developing CRUD applications due to its:

  • Simplicity: Easy to set up and get started.
  • Flexibility: Modular structure allows you to choose your tools and libraries.
  • Extensive Documentation: Comprehensive guides and community support.

Getting Started with Flask

Prerequisites

Before we dive into coding, ensure you have the following installed:

  • Python (version 3.6 or higher)
  • Pip (Python package installer)

Setting Up Your Environment

  1. Create a project directory: bash mkdir flask_crud_app cd flask_crud_app

  2. Create a virtual environment: bash python -m venv venv source venv/bin/activate # On Windows, use `venv\Scripts\activate`

  3. Install Flask: bash pip install Flask

Directory Structure

Your project structure should look like this:

flask_crud_app/
│
├── app.py
└── templates/
    ├── create.html
    ├── read.html
    ├── update.html
    └── delete.html

Creating the Flask Application

Step 1: Initialize Your Flask App

Open app.py and set up your basic Flask application:

from flask import Flask, render_template, request, redirect, url_for

app = Flask(__name__)

# Dummy data store
items = []

@app.route('/')
def index():
    return render_template('read.html', items=items)

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

Step 2: Create Functionality for Adding Items

Add a route to handle item creation:

@app.route('/create', methods=['GET', 'POST'])
def create():
    if request.method == 'POST':
        item = request.form['item']
        items.append(item)
        return redirect(url_for('index'))
    return render_template('create.html')

create.html template:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Create Item</title>
</head>
<body>
    <h1>Create Item</h1>
    <form method="POST">
        <input type="text" name="item" required>
        <input type="submit" value="Add Item">
    </form>
    <a href="/">Back</a>
</body>
</html>

Step 3: Read Items

We already set up the index route, which reads items. Let’s display them:

read.html template:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Items</title>
</head>
<body>
    <h1>Items</h1>
    <ul>
        {% for item in items %}
            <li>{{ item }} <a href="{{ url_for('update', item_id=loop.index0) }}">Edit</a> <a href="{{ url_for('delete', item_id=loop.index0) }}">Delete</a></li>
        {% endfor %}
    </ul>
    <a href="{{ url_for('create') }}">Add New Item</a>
</body>
</html>

Step 4: Update Functionality

Add a route to handle item updates:

@app.route('/update/<int:item_id>', methods=['GET', 'POST'])
def update(item_id):
    if request.method == 'POST':
        items[item_id] = request.form['item']
        return redirect(url_for('index'))
    return render_template('update.html', item=items[item_id])

update.html template:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Update Item</title>
</head>
<body>
    <h1>Update Item</h1>
    <form method="POST">
        <input type="text" name="item" value="{{ item }}" required>
        <input type="submit" value="Update Item">
    </form>
    <a href="/">Back</a>
</body>
</html>

Step 5: Delete Functionality

Finally, add a route to handle item deletion:

@app.route('/delete/<int:item_id>')
def delete(item_id):
    items.pop(item_id)
    return redirect(url_for('index'))

Running Your Flask CRUD Application

To run your application, execute the following command in your terminal:

python app.py

Visit http://127.0.0.1:5000/ in your web browser to see your CRUD application in action!

Troubleshooting Tips

  • Debugging: Use app.run(debug=True) to enable debug mode for easier troubleshooting.
  • Error Handling: Implement error handling for better user experience.
  • Data Persistence: For a real application, consider using a database like SQLite or PostgreSQL instead of a simple list.

Conclusion

In this article, we've walked through the essential steps to create a simple CRUD application using Flask. By mastering these concepts, you can build more advanced applications and expand your web development skills. Whether you’re a beginner or an experienced developer, Flask's flexibility and simplicity make it an ideal choice for your next project. Happy coding!

SR
Syed
Rizwan

About the Author

Syed Rizwan is a Machine Learning Engineer with 5 years of experience in AI, IoT, and Industrial Automation.