Admin
Mar 26, 2025
In this complete guide, you'll learn how to connect Flask (Python backend) with React.js (frontend) to build a full-stack web application. We'll cover:
✅ Setting up a Flask REST API
✅ Creating a React.js frontend
✅ Connecting React with Flask using Fetch API & Axios
✅ Handling CORS (Cross-Origin Resource Sharing)
✅ Sending & Receiving Data Between Frontend & Backend
By the end, you'll have a fully functional Flask + React app that communicates seamlessly!
🔹 Flask → Lightweight Python backend for APIs
🔹 React.js → Powerful frontend for dynamic UIs
🔹 Perfect combo for full-stack apps (startups, dashboards, SaaS products)
Before we start, make sure you have:
mkdir flask-react-app
cd flask-react-app
python -m venv venv
source venv/bin/activate # On Windows: `venv\Scripts\activate`
pip install flask flask-cors
server.py
(Flask API)from flask import Flask, jsonify, request
from flask_cors import CORS
app = Flask(__name__)
CORS(app) # Enable CORS for all routes
# Sample data
books = [
{"id": 1, "title": "Python for Beginners", "author": "John Doe"},
{"id": 2, "title": "React.js Fundamentals", "author": "Jane Smith"},
]
# API Routes
@app.route('/api/books', methods=['GET'])
def get_books():
return jsonify(books)
@app.route('/api/books', methods=['POST'])
def add_book():
new_book = request.get_json()
books.append(new_book)
return jsonify({"message": "Book added successfully!"}), 201
if __name__ == '__main__':
app.run(debug=True)
python server.py
API Endpoints:
GET
→ http://localhost:5000/api/books
POST
→ http://localhost:5000/api/books
npx create-react-app client
cd client
npm install axios
src/App.js
import React, { useState, useEffect } from 'react';
import axios from 'axios';
import './App.css';
function App() {
const [books, setBooks] = useState([]);
const [title, setTitle] = useState('');
const [author, setAuthor] = useState('');
// Fetch books from Flask API
useEffect(() => {
axios.get('http://localhost:5000/api/books')
.then(res => setBooks(res.data))
.catch(err => console.log(err));
}, []);
// Add a new book
const addBook = () => {
axios.post('http://localhost:5000/api/books', {
id: books.length + 1,
title,
author
})
.then(res => {
alert(res.data.message);
setBooks([...books, { id: books.length + 1, title, author }]);
setTitle('');
setAuthor('');
})
.catch(err => console.log(err));
};
return (
<div className="App">
<h1>Flask + React Bookstore</h1>
<div className="form">
<input
type="text"
placeholder="Title"
value={title}
onChange={(e) => setTitle(e.target.value)}
/>
<input
type="text"
placeholder="Author"
value={author}
onChange={(e) => setAuthor(e.target.value)}
/>
<button onClick={addBook}>Add Book</button>
</div>
<div className="books">
<h2>Book List</h2>
<ul>
{books.map(book => (
<li key={book.id}>
<strong>{book.title}</strong> by {book.author}
</li>
))}
</ul>
</div>
</div>
);
}
export default App;
npm start
Visit → http://localhost:3000
React fetches book data from Flask when the page loads:
useEffect(() => {
axios.get('http://localhost:5000/api/books')
.then(res => setBooks(res.data))
.catch(err => console.log(err));
}, []);
React sends new book data to Flask:
axios.post('http://localhost:5000/api/books', {
id: books.length + 1,
title,
author
})
Flask needs flask-cors
to allow React requests:
from flask_cors import CORS
CORS(app) # Allow all origins (for development)
✅ Flask Backend: Running on http://localhost:5000
✅ React Frontend: Running on http://localhost:3000
Try these actions:
🔹 Solution: Ensure flask-cors
is installed and configured.
🔹 Solution: Run Flask in debug mode (app.run(debug=True)
).
🔹 Solution: Manually update state after a successful POST:
.then(res => {
setBooks([...books, { id: books.length + 1, title, author }]);
})
You’ve successfully connected Flask with React.js! 🎉
🔹 Flask handles the backend (API & database).
🔹 React manages the frontend (UI & user interactions).
✅ Add user authentication (JWT)
✅ Connect to a real database (SQLAlchemy, MongoDB)
✅ Deploy to production (Heroku, Vercel, AWS)