Python HTTP请求的url路由

目录

一、什么是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等大型框架。
实践是最好的老师,建议手敲以上每种代码,理解好参数提取和路由注册的过程。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容