In this tutorial, you'll learn how to build a web application using the Flask framework and PostgreSQL as the database. We'll cover the entire process, from setting up your environment to deploying your application.
Prerequisites
- Python Installed: Ensure Python 3.x is installed on your system.
- Pip Package Manager: Ensure pip is installed for managing Python packages.
- PostgreSQL: Install PostgreSQL and set up a database for your application.
- Basic Python and SQL Knowledge: Familiarity with Python and SQL basics will be helpful.
Step 1: Set Up Your Development Environment
Create a Virtual Environment
python -m venv venv
Activate the Virtual Environment
.\venv\Scripts\activate
source venv/bin/activate
Install Required Packages
Install Flask, SQLAlchemy, and psycopg2
for PostgreSQL integration.
pip install Flask SQLAlchemy psycopg2-binary
Step 2: Create a Basic Flask Application
Create the Project Structure
mkdir flask_app
cd flask_app
Create the Flask Application
Create a file named app.py
and add the following code:
from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://username:password@localhost:5432/mydatabase'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return f'<User {self.username}>'
@app.route('/')
def index():
users = User.query.all()
return render_template('index.html', users=users)
@app.route('/add', methods=['POST'])
def add_user():
username = request.form['username']
email = request.form['email']
new_user = User(username=username, email=email)
db.session.add(new_user)
db.session.commit()
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True)
Create HTML Template
Create a directory named templates
and add a file named index.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flask App</title>
</head>
<body>
<h1>User List</h1>
<ul>
{% for user in users %}
<li>{{ user.username }} - {{ user.email }}</li>
{% endfor %}
</ul>
<h2>Add User</h2>
<form action="{{ url_for('add_user') }}" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required>
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
<button type="submit">Add User</button>
</form>
</body>
</html>
Step 3: Set Up PostgreSQL
Create a Database
Log in to your PostgreSQL instance and run:
CREATE DATABASE mydatabase;
Create a Database User
CREATE USER myuser WITH PASSWORD 'mypassword';
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
Update Database URI
In app.py
, replace:
'username:password@localhost:5432/mydatabase'
with your actual database connection details.
Step 4: Initialize the Database
Create the Database Tables
Open a Python shell in the project directory and run:
from app import db
db.create_all()
Start the Flask Application
python app.py
Access the Application
Go to http://127.0.0.1:5000/
in your web browser. You should see the user list and a form to add new users.
Step 5: Perform CRUD Operations
- Create: Add new users using the form.
- Read: View users on the homepage.
- Update and Delete: Extend the app with routes/templates to support these actions.
Step 6: Deploy the Application
Choose a Hosting Platform
Use services like Heroku, AWS, or Google Cloud to host your Flask app.
Prepare for Deployment
Create a Procfile
and requirements.txt
.
Procfile:
web: python app.py
requirements.txt:
Flask
SQLAlchemy
psycopg2-binary
gunicorn
Deploy
Follow your chosen platform’s instructions to deploy your app.
Conclusion
In this tutorial, you built a basic web application using Flask and PostgreSQL. You learned how to:
- Set up your development environment
- Connect Flask with PostgreSQL via SQLAlchemy
- Perform basic CRUD operations
- Prepare your app for deployment
For further improvements, consider adding authentication, input validation, and advanced queries. You can also deploy with Docker for enhanced portability.