# 命令行启动静态服务器# python -m http.server 8000# 编程方式使用fromhttp.serverimportHTTPServer,BaseHTTPRequestHandlerimportjsonclassSimpleHandler(BaseHTTPRequestHandler):defdo_GET(self):"""处理 GET 请求"""ifself.path=='/':self.send_response(200)self.send_header('Content-Type','text/html')self.end_headers()self.wfile.write(b'<h1>Hello Python Web!</h1>')elifself.path=='/api/data':self.send_response(200)self.send_header('Content-Type','application/json')self.end_headers()data={'message':'Hello API','status':'ok'}self.wfile.write(json.dumps(data).encode())else:self.send_response(404)self.end_headers()self.wfile.write(b'Not Found')defdo_POST(self):"""处理 POST 请求"""content_length=int(self.headers['Content-Length'])body=self.rfile.read(content_length)self.send_response(201)self.send_header('Content-Type','application/json')self.end_headers()response={'received':body.decode('utf-8'),'path':self.path}self.wfile.write(json.dumps(response).encode())deflog_message(self,format,*args):"""自定义日志"""print(f"[{self.date_time_string()}] {args[0]}")# 启动服务器# server = HTTPServer(('localhost', 8000), SimpleHandler)# print("服务器启动: http://localhost:8000")# server.serve_forever()
6.2 路由系统原理
classSimpleRouter:"""简单路由系统"""def__init__(self):self.routes={}defroute(self,path,methods=None):"""路由装饰器"""methods=methodsor['GET']defdecorator(func):self.routes[(path,tuple(methods))]=funcreturnfuncreturndecoratordefhandle(self,path,method='GET'):"""处理请求"""for(route_path,methods),handlerinself.routes.items():ifroute_path==pathandmethodinmethods:returnhandler()return"404 Not Found"# 使用router=SimpleRouter()@router.route('/',['GET'])defhome():return"首页"@router.route('/api/users',['GET'])defget_users():return"用户列表"@router.route('/api/users',['POST'])defcreate_user():return"创建用户"# 测试print(router.handle('/'))print(router.handle('/api/users','GET'))print(router.handle('/api/users','POST'))
7. RESTful API 设计
7.1 REST 原则
"""
RESTful API 设计规范
资源: /users ← 用户集合
/users/123 ← 单个用户
HTTP 方法映射 CRUD:
POST /users → 创建用户 (Create)
GET /users → 获取用户列表 (Read)
GET /users/123 → 获取单个用户 (Read)
PUT /users/123 → 更新用户 (Update)
PATCH /users/123 → 部分更新 (Update)
DELETE /users/123 → 删除用户 (Delete)
"""# 示例 API 响应格式user_api_response={"id":123,"name":"张三","email":"zhangsan@example.com","created_at":"2024-01-15T08:30:00Z","links":{"self":"/api/users/123","orders":"/api/users/123/orders"}}# 集合响应格式users_api_response={"data":[{"id":1,"name":"用户1"},{"id":2,"name":"用户2"}],"pagination":{"page":1,"per_page":10,"total":100,"total_pages":10},"links":{"first":"/api/users?page=1","next":"/api/users?page=2","last":"/api/users?page=10"}}
8. 小结
概念
要点
HTTP
请求-响应协议,无状态
方法
GET/POST/PUT/DELETE 对应 CRUD
状态码
2xx 成功,4xx 客户端错误,5xx 服务器错误
WSGI/ASGI
Python Web 应用与服务器接口规范
Web 框架
Django(全栈)、Flask(微框架)、FastAPI(异步)
9. 练习题
使用 requests 获取 GitHub API 的公开仓库信息,解析 JSON 响应。
实现一个简单的 RESTful API 路由系统,支持 GET/POST/PUT/DELETE。
对比 urllib 和 requests 的代码量差异,理解抽象的价值。
查看你常用网站的 HTTP 响应头,分析使用了哪些技术和策略。
下节预告:我们将进入 Django 框架,学习这个 Python 最流行的全栈 Web 框架的核心概念和基本用法。