目录
一、什么是URL路由?
二、自己手写简单HTTP请求路由
三、Flask的URL路由
四、Django的URL路由(分离式管理)
五、FastAPI的URL路由(异步API高性能)
六、搭配Request对象传参&返回值
七、用装饰器封装更优雅的“路由注册器”
八、参考扩展 —— 文章推荐
九、进阶用法/小结
结语
一、什么是URL路由?
URL 路由:在 Web 编程中,是指将 HTTP 请求中访问的 URL 路径解析出来,并分发到对应的处理逻辑(函数、类、模块)。
二、自己手写简单HTTP请求路由
不用第三方框架,理解原理。
Python
from http.server import BaseHTTPRequestHandler, HTTPServer
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
if self.path == "/":
self.send_response(200)
self.end_headers()
self.wfile.write(b"Hello! This is Home.")
elif self.path == "/about":
self.send_response(200)
self.end_headers()
self.wfile.write(b"This is About Page.")
elif self.path.startswith("/user/"):
username = self.path[len("/user/"):]
self.send_response(200)
self.end_headers()
self.wfile.write(f"Hello, {username}!".encode())
else:
self.send_response(404)
self.end_headers()
self.wfile.write(b"Page Not Found.")
if __name__ == "__main__":
server = HTTPServer(('localhost', 8080), MyHandler)
print("Serving at http://localhost:8080")
server.serve_forever()
说明:
这种写法原始,不适合复杂项目,但方便初学原理。
判断self.path
,根据路径做不同处理。
这里仅支持GET,可自行扩展支持POST等。
三、Flask的URL路由
Flask 是轻量Web框架,路由用得很优雅。
Python
from flask import Flask
app = Flask(__name__)
@app.route('/', methods=['GET'])
def home():
return "This is Home"
@app.route('/about')
def about():
return "About Page"
@app.route('/user/<username>')
def user(username):
return f"User: {username}"
# 支持多方法
@app.route('/post_example', methods=['POST'])
def post_example():
return "Posted Something!"
if __name__ == "__main__":
app.run(port=8080)
说明:
用 @app.route()
装饰函数,精确映射URL与HTTP方法。
<username>
支持参数提取。
支持多HTTP方法如.POST、GET。
四、Django的URL路由(分离式管理)
Django推荐规范的路由与视图分离:
Python
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home),
path('about/', views.about),
path('user/<str:username>/', views.user),
]
# views.py
from django.http import HttpResponse
def home(request):
return HttpResponse("Home Page")
def about(request):
return HttpResponse("About Page")
def user(request, username):
return HttpResponse(f"User: {username}")
说明:
URL配置集中在 urls.py,视图写在 views.py。
极为适合大型项目,管理方便。
五、FastAPI的URL路由(异步API高性能)
适用于现代API项目:
Python
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_home():
return {"msg": "Home Page"}
@app.get("/user/{username}")
def read_user(username: str):
return {"username": username}
@app.post("/login")
def login(username: str, password: str):
return {"msg": f"User {username} logged in"}
# 启动
# uvicorn yourfile:app --reload
特色:
异步特性,自动文档,类型检查,适合API开发。
六、搭配Request对象传参&返回值
以 Flask 为例,高级一点:
Python
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/query')
def query_params():
name = request.args.get('name')
age = request.args.get('age', default=18, type=int)
return jsonify({'name': name, 'age': age})
访问 /query?name=tom&age=20
七、用装饰器封装更优雅的“路由注册器”
玩进阶,自己实现个迷你版 Flask 路由系统(便于理解):
Python
handlers = {}
def route(path):
def decorator(func):
handlers[path] = func
return func
return decorator
@route("/")
def home():
return "Home Page"
@route("/about")
def about():
return "About Page"
def application(environ, start_response):
path = environ['PATH_INFO']
func = handlers.get(path, None)
if func:
response = func()
start_response('200 OK', [('Content-Type', 'text/html')])
return [response.encode()]
else:
start_response('404 Not Found', [('Content-Type', 'text/html')])
return [b'Not Found']
from wsgiref.simple_server import make_server
if __name__ == "__main__":
make_server('', 8080, application).serve_forever()
八、参考扩展 —— 文章推荐
Flask官方文档:Flask Routing
Django官方文档:URL Dispatcher
FastAPI官方文档:Path Operation Decorators
Python官方文档:http.server — HTTP servers
九、进阶用法/小结
路由参数类型(int, uuid, path等)。
路由分组(Flask蓝图、Django include、FastAPI APIRouter)。
静态文件路由处理。
多HTTP方法、RESTful风格路由。
结语
学习路由建议从原理和轻量级框架(如Flask、FastAPI)开始,再进到Django等大型框架。
实践是最好的老师,建议手敲以上每种代码,理解好参数提取和路由注册的过程。
暂无评论内容