Python Web 框架篇:Flask、Django、FastAPI介绍及其核心技术

Python Web 框架篇:Flask、Django、FastAPI介绍及其核心技术

目录

  1. 🐍 Flask
    • Flask 核心概念(路由、视图函数、模板渲染)
    • Flask Blueprint 模块化应用
    • Flask 扩展(Flask-SQLAlchemy、Flask-WTF、Flask-Migrate 等)
  2. 🌍 Django
    • Django 项目架构
    • Django ORM 及模型定义
    • Django 中间件
    • Django 信号机制
    • Django Form 和 Template 引擎
  3. 🚀 FastAPI
    • FastAPI 核心概念(路由、请求模型、响应模型)
    • Pydantic 数据验证与序列化
    • 异步编程与并发处理
    • FastAPI 中的依赖注入

1. 🐍 Flask

Flask 是一个轻量级的 Python Web 框架,以其灵活、简单且易于扩展的特性深受开发者的青睐。通过 Flask,可以快速创建并部署 Web 应用,同时保留对项目结构的高度控制。其核心概念包括路由、视图函数和模板渲染等。

Flask 核心概念(路由、视图函数、模板渲染)

路由 是 Flask 的基础,通过 @app.route() 装饰器将 URL 与对应的视图函数绑定。每当用户访问该 URL,Flask 就会执行相应的视图函数并返回结果。

python 复制代码
from flask import Flask, render_template

app = Flask(__name__)

# 路由示例
@app.route('/')
def homepage():
    return "Welcome to Flask Homepage!"

# 模板渲染示例
@app.route('/hello/<name>')
def hello(name):
    return render_template('hello.html', name=name)

if __name__ == '__main__':
    app.run(debug=True)

视图函数 是用于处理请求并返回响应的核心逻辑。在 Flask 中,视图函数可以返回字符串、HTML 模板或 JSON 数据。通过模板渲染机制,开发者可以将数据动态传递到前端界面,极大简化了页面展示的流程。

html 复制代码
<!-- hello.html -->
<!DOCTYPE html>
<html>
  <head>
    <title>Hello, Flask</title>
  </head>
  <body>
    <h1>Hello, {{ name }}!</h1>
  </body>
</html>

Flask 通过 Jinja2 模板引擎实现模板渲染,允许开发者将变量嵌入 HTML 模板中,从而动态生成页面。

Flask Blueprint 模块化应用

Flask 的 Blueprint 功能允许开发者将大型应用程序拆分成多个模块,每个模块可以独立开发和维护。这样可以提高应用的可扩展性和代码的可维护性,特别适合大型 Web 应用。

python 复制代码
from flask import Flask, Blueprint

# 创建蓝图
bp = Blueprint('admin', __name__, url_prefix='/admin')

@bp.route('/')
def admin_home():
    return "Welcome to the Admin Panel!"

app = Flask(__name__)
app.register_blueprint(bp)

if __name__ == '__main__':
    app.run(debug=True)

上面的例子展示了如何通过 Blueprint 创建一个独立的管理后台模块。通过 Blueprint,可以将不同的功能模块化,保持代码的清晰和可维护性。

Flask 扩展(Flask-SQLAlchemy、Flask-WTF、Flask-Migrate 等)

Flask 通过其丰富的扩展生态,能够轻松实现数据库操作、表单验证和数据库迁移等功能。最常用的扩展之一是 Flask-SQLAlchemy,它是一个 ORM 库,简化了与数据库的交互。

python 复制代码
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)

# 定义数据库模型
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), nullable=False)

@app.route('/')
def index():
    users = User.query.all()
    return ', '.join([user.username for user in users])

if __name__ == '__main__':
    db.create_all()
    app.run(debug=True)

通过 Flask-WTF ,可以轻松处理 Web 表单的验证。Flask-Migrate 则提供了方便的数据库迁移工具,帮助管理数据库结构的更新。


2. 🌍 Django

Django 是一个全栈 Web 框架,提供了包括 ORM、模板引擎、URL 路由、中间件和信号机制在内的完整工具集。它遵循"Django 式"的开发风格,能帮助开发者快速开发复杂的 Web 应用。

Django 项目架构

Django 的项目架构由多个应用组成,每个应用负责一组功能。开发者可以通过命令行创建项目和应用,Django 会自动生成必要的目录结构。

bash 复制代码
django-admin startproject myproject
cd myproject
python manage.py startapp myapp

一个典型的 Django 项目结构如下:

myproject/
    manage.py
    myproject/
        __init__.py
        settings.py
        urls.py
    myapp/
        migrations/
        __init__.py
        models.py
        views.py
        urls.py

Django ORM 提供了一种直观的方式定义和操作数据库模型。模型定义非常简洁,可以通过类来描述表结构,Django 会自动生成对应的数据库表。

python 复制代码
from django.db import models

class User(models.Model):
    username = models.CharField(max_length=100)
    email = models.EmailField()

通过 ORM,开发者可以使用 Python 代码直接操作数据库,而不需要编写 SQL 语句。

Django 中间件

中间件是 Django 请求处理链中的关键组件,它可以在请求到达视图之前或响应发出之前对其进行修改。Django 提供了多种内置中间件,如身份验证、跨站点请求伪造(CSRF)保护等。

python 复制代码
# settings.py
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
]

开发者还可以自定义中间件,处理特定的需求。

Django 信号机制

Django 的信号机制允许不同部分的代码在某些事件发生时进行通信。信号是一种发布-订阅模式,常用于在模型保存、删除等操作时触发特定逻辑。

python 复制代码
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import User

@receiver(post_save, sender=User)
def user_saved(sender, instance, created, **kwargs):
    if created:
        print(f'New user created: {instance.username}')

信号使得项目中的模块可以解耦,提升了代码的灵活性和可维护性。

Django Form 和 Template 引擎

Django 的表单系统通过 Form 类进行表单处理和验证,极大简化了表单数据的验证和处理流程。

python 复制代码
from django import forms

class ContactForm(forms.Form):
    name = forms.CharField(max_length=100)
    email = forms.EmailField()
    message = forms.CharField(widget=forms.Textarea)

Django 的模板引擎允许开发者通过模板标签和过滤器来渲染动态内容,帮助分离业务逻辑和前端显示。


3. 🚀 FastAPI

FastAPI 是一个现代的、高性能的 Web 框架,专注于异步编程和快速开发。它提供了自动生成文档、数据验证等功能,非常适合开发高并发的 Web 应用和 API 服务。

FastAPI 核心概念(路由、请求模型、响应模型)

FastAPI 的路由与 Flask 类似,通过装饰器将 URL 路径与视图函数绑定。不同的是,FastAPI 提供了请求和响应模型,可以明确指定请求参数的类型和格式。

python 复制代码
from fastapi import FastAPI

app = FastAPI()

# 定义路由
@app.get('/')
def read_root():
    return {"message": "Welcome to FastAPI"}

# 定义带参数的路由
@app.get('/hello/{name}')
def say_hello(name: str):
    return {"message": f"Hello, {name}!"}

FastAPI 通过 Pydantic 实现了强大的数据验证与序列化,开发者可以使用 Pydantic 模型定义请求和响应的数据结构,保证数据的一

致性和准确性。

python 复制代码
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str = None
    price: float

Pydantic 数据验证与序列化

在 FastAPI 中,Pydantic 被用于验证请求数据,确保传入的数据符合预期格式和类型要求。

python 复制代码
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

# 定义请求模型
class Item(BaseModel):
    name: str
    price: float
    in_stock: bool = True

@app.post("/items/")
def create_item(item: Item):
    return {"item": item}

Pydantic 会自动处理类型转换和验证,开发者无需手动处理数据的验证逻辑。

异步编程与并发处理

FastAPI 完全支持异步编程,开发者可以通过 async 关键字实现非阻塞的视图函数,从而有效处理并发请求。

python 复制代码
import asyncio
from fastapi import FastAPI

app = FastAPI()

@app.get('/async-task')
async def async_task():
    await asyncio.sleep(2)
    return {"message": "Async Task Completed!"}

通过异步编程,FastAPI 可以轻松处理数千个并发请求,极大提高了应用的性能。

FastAPI 中的依赖注入

FastAPI 提供了强大的依赖注入系统,开发者可以通过定义依赖函数,将常用的逻辑抽象出来并注入到多个路由函数中。

python 复制代码
from fastapi import Depends, FastAPI

app = FastAPI()

# 定义依赖函数
def get_token_header():
    return "Bearer token"

# 路由中使用依赖
@app.get('/protected')
def protected_route(token: str = Depends(get_token_header)):
    return {"token": token}

依赖注入不仅提高了代码的复用性,还帮助开发者更好地组织和管理项目中的业务逻辑。

相关推荐
愤怒的代码3 分钟前
Spring Boot对访问密钥加解密——HMAC-SHA256
java·spring boot·后端
API快乐传递者4 分钟前
Python爬虫获取淘宝详情接口详细解析
开发语言·爬虫·python
公众号Codewar原创作者6 分钟前
R数据分析:工具变量回归的做法和解释,实例解析
开发语言·人工智能·python
赵钰老师9 分钟前
基于R语言APSIM模型应用及批量模拟(精细农业、水肥管理、气候变化、粮食安全、土壤碳周转、环境影响、农业可持续性、农业生态等)
开发语言·数据分析·r语言
FL162386312911 分钟前
python版本的Selenium的下载及chrome环境搭建和简单使用
chrome·python·selenium
web1350858863514 分钟前
前端node.js
前端·node.js·vim
巫师不要去魔法部乱说15 分钟前
PyCharm专项训练5 最短路径算法
python·算法·pycharm
m0_5127446415 分钟前
极客大挑战2024-web-wp(详细)
android·前端
栗豆包20 分钟前
w118共享汽车管理系统
java·spring boot·后端·spring·tomcat·maven
Chloe.Zz22 分钟前
Python基础知识回顾
python