路由是什么?¶
想象一下你去餐厅吃饭:服务员不会直接带你到厨房,而是根据你点的菜(比如“宫保鸡丁”),把你引导到负责这道菜的厨师那里。在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,避免硬编码
掌握路由后,就能轻松实现不同页面的跳转和数据交互啦!