11.2 Practice Questions Explained
Key Concepts
- Flask Routing
- Flask Templates
- Flask Forms
- Flask Sessions
- Flask Error Handling
- Flask Blueprints
- Flask RESTful APIs
- Flask Database Integration
- Flask File Uploads
- Flask Authentication
- Flask Deployment
Flask Routing
Flask routing allows you to map URLs to specific functions in your application. This is done using the @app.route
decorator. For example, a route for the homepage might look like this:
@app.route('/') def home(): return 'Welcome to the homepage!'
Flask Templates
Flask uses Jinja2 as its templating engine. Templates allow you to separate the presentation logic from the business logic. For example, you can create a template for a user profile:
<html> <head> <title>User Profile</title> </head> <body> <h1>Welcome, {{ user.name }}</h1> <p>Email: {{ user.email }}</p> </body> </html>
Flask Forms
Flask-WTF is an extension that integrates Flask with WTForms, allowing you to create and validate forms easily. For example, a simple login form might look like this:
from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField from wtforms.validators import DataRequired class LoginForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) password = PasswordField('Password', validators=[DataRequired()]) submit = SubmitField('Login')
Flask Sessions
Flask sessions allow you to store user-specific data across requests. This is useful for maintaining user state, such as login status. For example, you can store a user's name in the session:
from flask import Flask, session app = Flask(__name__) app.secret_key = 'secret' @app.route('/login') def login(): session['username'] = 'JohnDoe' return 'Logged in!'
Flask Error Handling
Flask allows you to handle errors gracefully by defining custom error pages. For example, you can create a custom 404 error page:
@app.errorhandler(404) def page_not_found(e): return 'Page not found', 404
Flask Blueprints
Flask blueprints allow you to organize your application into smaller, reusable components. For example, you can create a blueprint for user authentication:
from flask import Blueprint auth = Blueprint('auth', __name__) @auth.route('/login') def login(): return 'Login page'
Flask RESTful APIs
Flask-RESTful is an extension that simplifies the creation of RESTful APIs. For example, you can create a simple API endpoint to get a list of users:
from flask import Flask from flask_restful import Resource, Api app = Flask(__name__) api = Api(app) class Users(Resource): def get(self): return {'users': ['Alice', 'Bob', 'Charlie']} api.add_resource(Users, '/users')
Flask Database Integration
Flask-SQLAlchemy is an extension that integrates Flask with SQLAlchemy, allowing you to interact with databases easily. For example, you can define a User model:
from flask_sqlalchemy import SQLAlchemy 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)
Flask File Uploads
Flask allows you to handle file uploads easily. For example, you can create a route to upload a profile picture:
from flask import Flask, request app = Flask(__name__) @app.route('/upload', methods=['POST']) def upload_file(): file = request.files['file'] file.save('uploads/' + file.filename) return 'File uploaded successfully'
Flask Authentication
Flask-Login is an extension that provides user session management. For example, you can create a login route:
from flask_login import LoginManager, UserMixin, login_user login_manager = LoginManager(app) class User(UserMixin): pass @login_manager.user_loader def load_user(user_id): return User() @app.route('/login', methods=['POST']) def login(): user = User() login_user(user) return 'Logged in successfully'
Flask Deployment
Flask applications can be deployed using various methods, such as using a WSGI server like Gunicorn or deploying to a cloud platform like Heroku. For example, to deploy using Gunicorn:
gunicorn -w 4 myapp:app