路由是什么?

想象一下你去餐厅吃饭:服务员不会直接带你到厨房,而是根据你点的菜(比如“宫保鸡丁”),把你引导到负责这道菜的厨师那里。在Web开发中,路由就像餐厅的服务员,它负责接收用户在浏览器输入的网址(比如 http://example.com/home),然后找到对应的“厨师”(处理函数),让厨师做出回应(返回网页或数据)。

为什么需要路由?

当用户访问网站的不同页面时(比如首页、用户中心、文章详情页),路由需要帮你:
1. 接收用户的请求(比如“访问/about”)
2. 匹配对应的处理逻辑(比如“显示关于我们的页面”)
3. 返回结果给用户(比如网页内容或JSON数据)

用Flask实现第一个路由(最基础)

以最流行的轻量级框架Flask为例,实现一个简单的路由。

步骤1:安装Flask

先确保安装了Flask:

pip install flask

步骤2:写一个基础路由

from flask import Flask  # 导入Flask类

app = Flask(__name__)  # 创建Flask应用实例

# 定义路由:访问根路径 '/' 时,执行index函数
@app.route('/')
def index():
    return "Hello, Web! 这里是首页~"  # 返回响应内容

# 启动应用
if __name__ == '__main__':
    app.run(debug=True)  # debug=True 开启调试模式

效果:

运行代码后,访问 http://127.0.0.1:5000/,就能看到“Hello, Web! 这里是首页~”。

进阶:带参数的路由

如果需要动态获取用户输入的参数(比如访问 /user/123 获取用户ID),可以用 <参数名> 定义路由。

示例:获取用户名称

@app.route('/user/<username>')  # 这里 <username> 是参数,会传给user_profile函数
def user_profile(username):
    return f"欢迎访问用户主页:{username}!"

# 访问 http://127.0.0.1:5000/user/小明 会显示:欢迎访问用户主页:小明!

进阶:带类型的参数

参数可以指定类型(如int、float、path),自动转换类型:

@app.route('/post/<int:post_id>')  # <int:post_id> 表示参数是整数
def show_post(post_id):
    return f"查看文章ID:{post_id}"

# 访问 http://127.0.0.1:5000/post/123 会显示:查看文章ID:123

处理不同HTTP请求(GET/POST)

不同的页面可能需要不同的请求方式(比如首页用GET获取内容,登录表单用POST提交数据)。路由可以通过 methods 参数指定允许的请求方法。

示例:支持GET和POST的路由

from flask import request  # 导入request对象获取请求信息

@app.route('/login', methods=['GET', 'POST'])  # 允许GET和POST方法
def login():
    if request.method == 'POST':  # 判断请求方式
        return "登录成功!"
    else:
        return "请输入账号密码(表单页面)"  # GET请求时显示表单

关键点:

  • GET:默认方法,用于获取数据(比如打开网页)
  • POST:用于提交数据(比如表单提交、上传文件)
  • 如果只允许一种方法,可省略 methods(默认只允许GET)

路由的“反向查找”(url_for)

有时候需要在代码中动态生成路由URL(比如在模板中跳转),可以用 url_for 函数。

示例:生成路由URL

from flask import url_for

@app.route('/')
def index():
    # 生成/user/小明的URL,对应user_profile函数
    user_url = url_for('user_profile', username='小明')
    return f"首页链接:<a href='{user_url}'>小明的主页</a>"

@app.route('/user/<username>')
def user_profile(username):
    return f"用户主页:{username}"

总结

路由是Python Web开发中连接用户请求和处理逻辑的核心。关键用法:
1. 基础路由:用 @app.route('/路径') 定义,对应视图函数
2. 动态参数:用 <参数名><类型:参数名> 接收用户输入
3. 请求方法:通过 methods 指定支持的HTTP方法
4. 反向解析:用 url_for 生成路由URL,避免硬编码

掌握路由后,就能轻松实现不同页面的跳转和数据交互啦!

小夜