11.1 Review of Key Concepts
Key Concepts
- Flask Basics
- Routing and Views
- Templates and Jinja2
- Request and Response Objects
- Static Files and Forms
- Database Integration
- Authentication and Authorization
- Error Handling
- Testing Flask Applications
- Deployment
- Advanced Topics
Flask Basics
Flask is a micro web framework written in Python. It is designed to be simple and easy to use, yet powerful enough to build complex web applications. Flask is often referred to as a "micro" framework because it does not require particular tools or libraries.
from flask import Flask app = Flask(__name__) @app.route('/') def home(): return 'Hello, World!' if __name__ == '__main__': app.run()
Routing and Views
Routing in Flask involves mapping URLs to specific functions that handle the request. These functions are called views. The @app.route
decorator is used to define routes.
@app.route('/about') def about(): return 'About Page'
Templates and Jinja2
Templates allow you to separate the presentation logic from the business logic. Flask uses the Jinja2 templating engine, which allows for dynamic content and control structures.
<html> <body> <h1>Hello, {{ name }}!</h1> </body> </html>
Request and Response Objects
The request object contains all the data sent by the client, such as form data or query parameters. The response object is used to send data back to the client.
from flask import request, jsonify @app.route('/data') def get_data(): data = {'name': request.args.get('name')} return jsonify(data)
Static Files and Forms
Static files, such as CSS, JavaScript, and images, are served directly by Flask. Forms are used to collect user input, and Flask provides utilities to handle form data securely.
<form method="post" action="/submit"> <input type="text" name="username"> <input type="submit" value="Submit"> </form>
Database Integration
Flask can be integrated with various databases using extensions like Flask-SQLAlchemy. This allows you to interact with databases using Python objects.
from flask_sqlalchemy import SQLAlchemy app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.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)
Authentication and Authorization
Authentication verifies the identity of a user, while authorization determines what actions a user is allowed to perform. Flask-Login and Flask-Principal are popular extensions for handling these tasks.
from flask_login import LoginManager, UserMixin, login_required login_manager = LoginManager(app) class User(UserMixin): pass @login_manager.user_loader def load_user(user_id): return User() @app.route('/protected') @login_required def protected(): return 'This is a protected page'
Error Handling
Error handling in Flask involves defining custom error pages and handling exceptions. The @app.errorhandler
decorator is used to define error handlers.
@app.errorhandler(404) def page_not_found(e): return 'Page Not Found', 404
Testing Flask Applications
Testing ensures that your application behaves as expected. Flask-Testing is an extension that provides utilities for writing unit and integration tests.
from flask_testing import TestCase class MyTest(TestCase): def create_app(self): app.config['TESTING'] = True return app def test_home_page(self): response = self.client.get('/') self.assert200(response)
Deployment
Deployment involves making your Flask application available on the internet. Common deployment options include Heroku, AWS, and Docker.
# Dockerfile FROM python:3.8-slim WORKDIR /app COPY . /app RUN pip install -r requirements.txt CMD ["python", "app.py"]
Advanced Topics
Advanced topics include Blueprints, RESTful APIs, Websockets, and background tasks. These topics allow you to build more complex and scalable applications.
from flask import Blueprint auth = Blueprint('auth', __name__, url_prefix='/auth') @auth.route('/login') def login(): return 'Login Page'