后端涨薪密码:5 框架 + MCP 攻略,学会直接涨 30%

常用 Python 后端开发框架深度解析

在 Python 后端开发领域,有众多优秀的框架可供选择。每个框架都有其独特的特点、适用场景和开发方式。下面将详细介绍几个常用的 Python 后端开发框架,并在最后补充关于 MCP(模型上下文协议)的编写及接入方法。

1. Flask

特点

Flask 是一个轻量级的 Web 框架,以其简洁性和灵活性著称。它的核心代码非常精简,几乎不强制开发者使用特定的工具和库。这使得开发者可以根据项目的实际需求,自由地选择和添加各种扩展,例如数据库操作、表单验证、用户认证等。这种灵活性让 Flask 在小型项目和快速原型开发中表现出色。

适用场景

  • 小型项目:对于一些功能相对简单、需求变化较快的小型项目,Flask 的轻量级特性可以让开发者快速搭建起项目框架,并且能够根据需求灵活调整。
  • 快速原型开发:在产品的原型开发阶段,需要快速验证想法和功能。Flask 可以帮助开发者在短时间内实现一个可运行的原型,方便进行演示和测试。

示例代码

python 复制代码
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

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

在上述代码中,首先导入了 Flask 类,然后创建了一个 Flask 应用实例 app。使用 @app.route 装饰器定义了一个路由,当用户访问根路径 / 时,会调用 hello_world 函数并返回 Hello, World!。最后,使用 app.run 方法启动应用,并开启调试模式。

扩展使用示例(数据库操作)

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

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

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f'<User {self.name}>'

@app.route('/add_user/<name>/<email>')
def add_user(name, email):
    new_user = User(name=name, email=email)
    db.session.add(new_user)
    db.session.commit()
    return f'用户 {name} 已添加'

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

这里使用了 flask_sqlalchemy 扩展来进行数据库操作。定义了一个 User 模型类,对应数据库中的 user 表。在 /add_user 路由中,创建了一个新的用户对象并添加到数据库中。

2. Django

特点

Django 是一个功能全面的 Web 框架,遵循"开箱即用"的原则。它自带了许多实用的工具和功能,如 ORM(对象关系映射)、管理界面、表单处理、用户认证等。这使得开发者可以快速搭建起一个功能完善的网站,而无需自己去实现这些基础功能。同时,Django 有严格的代码规范和目录结构,有利于团队协作开发。

适用场景

  • 大型项目:对于功能复杂、数据量大、需要多模块协作的大型项目,Django 的全面性和规范性可以帮助开发者更好地组织代码,提高开发效率和可维护性。
  • 企业级应用开发:企业级应用通常对安全性、稳定性和可扩展性有较高的要求。Django 提供了丰富的安全机制和可扩展的架构,能够满足企业级应用的需求。

示例代码

python 复制代码
# 创建一个简单的 Django 视图
from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello, world. You're at the polls index.")

上述代码定义了一个简单的 Django 视图函数 hello,当用户访问该视图对应的 URL 时,会返回一个包含 Hello, world. You're at the polls index. 的 HTTP 响应。

项目结构示例

Django 项目有特定的目录结构,一个典型的 Django 项目结构如下:

markdown 复制代码
myproject/
├── manage.py
├── myapp/
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations/
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
└── myproject/
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

其中,manage.py 是项目的管理脚本,myapp 是一个应用,包含了模型、视图、管理界面等相关代码,myproject 目录下的 settings.py 是项目的配置文件,urls.py 是项目的 URL 路由配置文件。

3. FastAPI

特点

FastAPI 是一个基于 Python 的类型提示的高性能 Web 框架。它利用 Python 的类型提示来实现自动的数据验证、序列化和文档生成。FastAPI 支持异步编程,能够充分利用现代服务器的多核性能,提高应用的处理效率。同时,它还提供了简洁的 API 接口,易于上手和使用。

适用场景

  • 对性能要求较高的 API 开发:在需要处理大量并发请求的 API 开发中,FastAPI 的高性能和异步处理能力可以显著提高系统的响应速度和吞吐量。
  • 微服务开发:微服务架构强调服务的独立性和高可扩展性。FastAPI 的轻量级和高性能特点使其非常适合用于构建微服务。

示例代码

python 复制代码
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

在上述代码中,创建了一个 FastAPI 应用实例 app。使用 @app.get 装饰器定义了两个路由,分别处理根路径 //items/{item_id} 的 GET 请求。read_root 函数返回一个包含 Hello: World 的 JSON 响应,read_item 函数接收一个整数类型的 item_id 和一个可选的字符串类型的 q 参数,并返回一个包含这些信息的 JSON 响应。

数据验证示例

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

app = FastAPI()

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

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

这里使用了 pydantic 库来进行数据验证。定义了一个 Item 模型类,包含 namepriceis_offer 三个字段。在 /items/ 路由中,接收一个 Item 类型的请求体,并返回该请求体。FastAPI 会自动验证请求体的数据类型和格式。

4. Tornado

特点

Tornado 是一个具有高性能和异步 I/O 能力的 Web 框架。它基于非阻塞 I/O 和单线程事件循环,能够处理大量的并发连接,而不会消耗过多的系统资源。Tornado 还提供了内置的异步 HTTP 客户端和服务器,方便进行网络通信。

适用场景

  • 实时 Web 应用:如实时聊天应用、实时数据监控系统等,需要处理大量的并发连接和实时数据传输,Tornado 的高性能和异步处理能力可以满足这些需求。
  • 游戏服务器:游戏服务器通常需要处理大量的玩家连接和实时交互,Tornado 的异步 I/O 能力可以提高服务器的并发处理能力和响应速度。

示例代码

python 复制代码
import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

在上述代码中,定义了一个 MainHandler 类,继承自 tornado.web.RequestHandler,重写了 get 方法,当用户发送 GET 请求时,返回 Hello, worldmake_app 函数创建了一个 Tornado 应用实例,并定义了路由规则。最后,启动应用并监听 8888 端口。

异步处理示例

python 复制代码
import tornado.ioloop
import tornado.web
import asyncio

class AsyncHandler(tornado.web.RequestHandler):
    async def get(self):
        await asyncio.sleep(1)
        self.write("Async response")

def make_app():
    return tornado.web.Application([
        (r"/async", AsyncHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

这里定义了一个异步处理的视图 AsyncHandler,使用 asyncawait 关键字实现异步操作。当用户访问 /async 路径时,会等待 1 秒后返回 Async response

5. Sanic

特点

Sanic 是一个基于异步编程的高性能 Web 框架,其语法与 Flask 相似,易于上手。Sanic 利用 Python 的 asyncio 库实现异步 I/O,能够在单线程中处理大量的并发请求,提高应用的性能。

适用场景

  • 对性能有较高要求的 Web 应用和 API 开发:在需要处理大量并发请求的 Web 应用和 API 开发中,Sanic 的高性能和异步处理能力可以显著提高系统的响应速度和吞吐量。

示例代码

python 复制代码
from sanic import Sanic
from sanic.response import text

app = Sanic("MyHelloWorldApp")

@app.get("/")
async def hello_world(request):
    return text("Hello, world.")

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

在上述代码中,创建了一个 Sanic 应用实例 app。使用 @app.get 装饰器定义了一个路由,当用户访问根路径 / 时,会调用 hello_world 函数并返回 Hello, world.hello_world 函数是一个异步函数,使用 async 关键字定义。

中间件示例

python 复制代码
from sanic import Sanic
from sanic.response import text

app = Sanic("MyApp")

@app.middleware('request')
async def print_on_request(request):
    print("Request received")

@app.middleware('response')
async def prevent_xss(request, response):
    response.headers["X-XSS-Protection"] = "1; mode=block"

@app.get("/")
async def hello_world(request):
    return text("Hello, world.")

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

这里定义了两个中间件,一个在请求处理前执行,打印 Request received,另一个在响应返回前执行,添加 X-XSS-Protection 头,用于防止跨站脚本攻击。

6. 编写 MCP(模型上下文协议)及接入 MCP 服务

MCP 简介

MCP(模型上下文协议)允许开发者自由接入外部 AI 工具和资源,实现更强大的功能扩展。通过 MCP,开发者可以将不同的工具和服务集成到自己的应用中,构建一个开放的生态系统。

编写 MCP 服务端代码示例(Python)

python 复制代码
from mcp.server import FastMCP
from selenium.webdriver import Remote, ChromeOptions

mcp = FastMCP("database")

@mcp.tool()
def get_user_info(name: str):
    # 连接数据库并查询用户信息
    import mysql.connector
    conn = mysql.connector.connect(
        host="localhost",
        user="your_username",
        password="your_password",
        database="your_database"
    )
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users WHERE name = %s", (name,))
    result = cursor.fetchone()
    conn.close()
    return result

@mcp.tool()
def generate_chart(data: list):
    # 调用 ECharts 生成图表
    import requests
    response = requests.post("https://echarts.baidu.com/generate", json={"data": data})
    return response.json()

if __name__ == "__main__":
    mcp.run()

在上述代码中,使用 FastMCP 创建了一个 MCP 服务实例。定义了两个工具函数 get_user_infogenerate_chart,分别用于查询用户信息和生成图表。@mcp.tool() 装饰器将这些函数注册为 MCP 工具。

接入 MCP 服务的方法

1. 进入 MCP 设置

在使用的 Python 后端框架应用中,通常可以在配置文件或特定的设置界面中找到 MCP 设置选项。例如,在 Trae 工具中,可以点击界面右上角的"AI 侧栏",然后选择"MCP"进入设置页面。

2. 添加服务
  • 从市场选择服务:许多 MCP 平台提供了服务市场,开发者可以在市场中搜索并选择需要的服务,如 GitHub、数据库服务等。选择服务后,按照提示进行授权和配置。
  • 手动粘贴 JSON 配置:如果需要接入自定义的 MCP 服务,可以手动编写 JSON 配置文件,然后在设置页面中粘贴该配置。配置文件通常包含服务的名称、URL、认证信息等。
3. 测试调用

在完成服务添加和配置后,可以在应用中进行测试调用。例如,在 Flask 应用中,可以通过以下代码调用 MCP 服务:

python 复制代码
from flask import Flask
import requests

app = Flask(__name__)

@app.route('/get_user/<name>')
def get_user(name):
    mcp_url = "http://your_mcp_server/get_user_info"
    response = requests.post(mcp_url, json={"name": name})
    return response.json()

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

在上述代码中,定义了一个 /get_user 路由,当用户访问该路由时,会向 MCP 服务发送请求,获取用户信息并返回。

这些框架各有优势,开发者可以根据项目的规模、性能需求、开发周期等因素来选择合适的框架。同时,通过 MCP 可以进一步扩展应用的功能,实现更多的可能性。

相关推荐
写bug写bug10 分钟前
Java并发编程:什么是线程组?它有什么作用?
java·后端
Andya_net16 分钟前
SpringBoot | 构建客户树及其关联关系的设计思路和实践Demo
java·spring boot·后端
南囝coding1 小时前
关于我的第一个产品!
前端·后端·产品
今晚不吹海风1 小时前
技术视角解析「塔罗趣读」:当传统占卜遇见 AI 开发
trae
北漂老男孩1 小时前
Spring Boot 自动配置深度解析:从源码结构到设计哲学
java·spring boot·后端
陈明勇1 小时前
MCP 实战:用 Go 语言开发一个查询 IP 信息的 MCP 服务器
人工智能·后端·mcp
小咕聊编程2 小时前
【含文档+PPT+源码】基于SpringBoot+Vue的移动台账管理系统
java·spring boot·后端
景天科技苑2 小时前
【Rust结构体】Rust结构体详解:从基础到高级应用
开发语言·后端·rust·结构体·关联函数·rust结构体·结构体方法
-曾牛2 小时前
Spring Boot常用注解详解:实例与核心概念
java·spring boot·后端·spring·java-ee·个人开发·spring boot 注解
Goboy2 小时前
零基础搞定 Trae 智能体配置 + MySQL MCP 集成!手把手教学
llm·ai编程·trae