2025-10-31 19:36:41 +05:30
< div align = "center" >
< img src = "https://raw.githubusercontent.com/pallets/flask/refs/heads/stable/docs/_static/flask-name.svg" alt = "Flask" height = "150" >
< p > < em > Flask - The Python microframework for building web applications< / em > < / p >
< / div >
2025-06-09 14:31:31 -07:00
2024-04-07 10:24:40 -07:00
# Flask
2025-10-31 19:36:41 +05:30
Flask is a lightweight [WSGI] web application framework designed to make getting started quick and easy, with the ability to scale up to complex applications. It began as a simple wrapper around [Werkzeug] and [Jinja], and has become one of the most popular Python web application frameworks.
2024-04-07 10:24:40 -07:00
2025-10-31 19:36:41 +05:30
Flask offers suggestions but doesn't enforce any dependencies or project layout, giving developers the freedom to choose their tools and libraries. The ecosystem includes many community-provided extensions that make adding new functionality easy.
2024-04-07 10:24:40 -07:00
[WSGI]: https://wsgi.readthedocs.io/
[Werkzeug]: https://werkzeug.palletsprojects.com/
[Jinja]: https://jinja.palletsprojects.com/
2025-10-31 19:36:41 +05:30
---
## 🚀 Quick Start
### Installation
```bash
pip install flask
```
### Your First Flask Application
Create **app.py** :
2024-04-07 10:24:40 -07:00
```python
from flask import Flask
app = Flask(__name__)
@app .route("/")
2025-10-31 19:36:41 +05:30
def hello_world():
return "< p > Hello, World!< / p > "
if __name__ == "__main__":
app.run(debug=True)
```
### Run the Application
```bash
# Method 1: Using flask command
flask --app app run --debug
# Method 2: Using python
python app.py
```
Visit http://localhost:5000 in your browser to see your application!
---
## 💡 Common Examples
### Basic Routing
```python
from flask import Flask
app = Flask(__name__)
@app .route('/')
def index():
return 'Home Page'
@app .route('/user/< username > ')
def show_user(username):
return f'User: {username}'
@app .route('/post/< int:post_id > ')
def show_post(post_id):
return f'Post {post_id}'
@app .route('/path/< path:subpath > ')
def show_subpath(subpath):
return f'Subpath: {subpath}'
```
---
### Working with Templates
```python
from flask import Flask, render_template
app = Flask(__name__)
@app .route('/hello/')
@app .route('/hello/< name > ')
def hello(name=None):
return render_template('hello.html', name=name)
```
Create **templates/hello.html** :
```html
<!DOCTYPE html>
< html >
< head >
< title > Hello from Flask< / title >
< / head >
< body >
{% if name %}
< h1 > Hello {{ name }}!< / h1 >
{% else %}
< h1 > Hello, World!< / h1 >
{% endif %}
< / body >
< / html >
```
---
### Handling Forms and POST Requests
```python
from flask import Flask, render_template, request
app = Flask(__name__)
@app .route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
# Process login logic here
return f'Welcome {username}!'
return render_template('login.html')
```
---
### JSON API Endpoints
```python
from flask import Flask, jsonify
app = Flask(__name__)
@app .route('/api/users')
def get_users():
users = [
{'id': 1, 'name': 'Alice', 'email': 'alice@example .com'},
{'id': 2, 'name': 'Bob', 'email': 'bob@example .com'}
]
return jsonify(users)
@app .route('/api/users/< int:user_id > ')
def get_user(user_id):
user = {'id': user_id, 'name': 'John Doe', 'email': 'john@example .com'}
return jsonify(user)
```
---
## 🛠️ Advanced Features
### Using Blueprints for Modular Applications
```python
from flask import Flask, Blueprint
# Create a blueprint
auth_bp = Blueprint('auth', __name__ )
@auth_bp .route('/login')
def login():
return 'Login Page'
@auth_bp .route('/register')
def register():
return 'Register Page'
# Register blueprint in main app
app = Flask(__name__)
app.register_blueprint(auth_bp, url_prefix='/auth')
```
---
### Database Integration with Flask-SQLAlchemy
```python
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
@app .route('/users')
def list_users():
users = User.query.all()
return {'users': [{'username': user.username, 'email': user.email} for user in users]}
2024-04-07 10:24:40 -07:00
```
2025-10-31 19:36:41 +05:30
---
### Error Handling
```python
from flask import Flask, render_template
app = Flask(__name__)
@app .errorhandler(404)
def page_not_found(error):
return render_template('404.html'), 404
@app .errorhandler(500)
def internal_error(error):
return render_template('500.html'), 500
2024-04-07 10:24:40 -07:00
```
2025-10-31 19:36:41 +05:30
---
## 🐛 Troubleshooting Common Issues
### Application Won't Start
**Error: `ModuleNotFoundError: No module named 'flask'` **
```bash
# Make sure Flask is installed
pip install flask
# Or if using virtual environment
python -m pip install flask
2024-04-07 10:24:40 -07:00
```
2025-10-31 19:36:41 +05:30
---
2024-04-07 10:24:40 -07:00
2025-10-31 19:36:41 +05:30
**Error: "Could not locate Flask application"**
2024-04-07 10:24:40 -07:00
2025-10-31 19:36:41 +05:30
```bash
# Specify the application explicitly
flask --app app.py run
2025-01-05 09:02:41 -08:00
2025-10-31 19:36:41 +05:30
# Or set FLASK_APP environment variable
export FLASK_APP=app.py
flask run
```
---
**Error: Port Already in Use**
2025-01-05 09:02:41 -08:00
2025-10-31 19:36:41 +05:30
```bash
# Use a different port
flask run --port 5001
# Or find and kill the process using the port
lsof -ti:5000 | xargs kill -9
```
---
**Debug Mode Not Working**
```python
# Enable debug mode in code
if __name__ == "__main__":
app.run(debug=True)
```
Or via command line:
```bash
flask run --debug
```
---
**Template Not Found**
```python
# Ensure templates directory exists and is named correctly
app = Flask(__name__, template_folder='templates')
```
---
## 📚 Project Structure
A typical Flask project structure:
```
myflaskapp/
├── app.py
├── requirements.txt
├── templates/
│ ├── base.html
│ ├── index.html
│ └── hello.html
├── static/
│ ├── css/
│ ├── js/
│ └── images/
└── instance/
└── config.py
```
---
## 🔧 Installation Options
### Using pip (recommended)
```bash
pip install flask
```
### Using conda
```bash
conda install -c conda-forge flask
```
### From Source
```bash
git clone https://github.com/pallets/flask
cd flask
pip install -e .
```
### With Popular Extensions
```bash
pip install flask flask-sqlalchemy flask-wtf flask-login flask-mail
```
---
## 🤝 Contributing
We welcome contributions from the community! Please see our [contribution guide][contrib] for information on:
- Reporting bugs and issues
- Requesting new features
- Asking or answering questions
- Submitting pull requests
- Code style and guidelines
2025-01-05 09:02:41 -08:00
[contrib]: https://palletsprojects.com/contributing/
2025-10-31 19:36:41 +05:30
---
## 💖 Donate
The Pallets organization develops and supports Flask and the libraries it uses. To help grow the community and allow maintainers to devote more time to the projects, [please consider donating today].
[please consider donating today]: https://palletsprojects.com/donate
---
## 📖 Documentation
Complete documentation is available at [https://flask.palletsprojects.com/ ](https://flask.palletsprojects.com/ )
---
## 🌟 Ecosystem
Popular Flask extensions:
- **Flask-SQLAlchemy** – Database integration
- **Flask-WTF** – Form handling
- **Flask-Login** – User session management
- **Flask-Mail** – Email support
- **Flask-RESTful** – Building REST APIs
- **Flask-SocketIO** – WebSocket support
---
< div align = "center" >
< sub > Built with ❤️ by the < a href = "https://palletsprojects.com/" > Pallets< / a > community< / sub >
< / div >