热门课程 - 发现知识之美
学习进度

已完成: 0%

Flask Web开发框架

作者: 郑老师 更新: 2025-11-27 阅读: 难度: 高级
学习工具

. Flask 路由和视图

路由是 Flask 框架的核心功能之一,它负责将 URL 映射到相应的视图函数。

路由装饰器

  • @app.route('/') - 基本路由
  • @app.route('/path') - 指定路径
  • @app.route('/path', methods=['GET', 'POST']) - 指定HTTP方法

基本路由示例

基本路由
from flask import Flask app = Flask(__name__) # 主页路由 @app.route('/') def index(): return 'Welcome to Home Page' # 关于页面 @app.route('/about') def about(): return 'About Us Page' # 联系页面 @app.route('/contact') def contact(): return 'Contact Page' if __name__ == '__main__': app.run(debug=True)

动态路由

动态路由参数
from flask import Flask app = Flask(__name__) # 字符串参数 @app.route('/user/<username>') def show_user(username): return f'User: {username}' # 整数参数 @app.route('/post/<int:post_id>') def show_post(post_id): return f'Post ID: {post_id}' # 浮点数参数 @app.route('/price/<float:price>') def show_price(price): return f'Price: ${price:.2f}' # 路径参数(包含斜杠) @app.route('/path/<path:subpath>') def show_subpath(subpath): return f'Subpath: {subpath}' # UUID参数 @app.route('/uuid/<uuid:uuid_val>') def show_uuid(uuid_val): return f'UUID: {uuid_val}'

HTTP 方法处理

处理不同HTTP方法
from flask import Flask, request, jsonify app = Flask(__name__) # 同时处理 GET 和 POST 请求 @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] # 处理登录逻辑 return f'Welcome {username}!' else: # 显示登录表单 return '<form method="post"><input type="text" name="username" placeholder="Username"><input type="password" name="password" placeholder="Password"><input type="submit" value="Login"></form>' # 只处理 POST 请求 @app.route('/api/users', methods=['POST']) def create_user(): data = request.get_json() # 处理创建用户逻辑 return jsonify({"status": "success", "user": data}) # 只处理 GET 请求 @app.route('/api/users', methods=['GET']) def get_users(): users = [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}] return jsonify(users)

URL 构建

使用 url_for 构建 URL
from flask import Flask, url_for, redirect app = Flask(__name__) @app.route('/') def index(): # 构建其他路由的URL user_url = url_for('show_user', username='john') post_url = url_for('show_post', post_id=123) return f'<h1>Home Page</h1><a href="{user_url}">View John\'s profile</a><br><a href="{post_url}">View Post 123</a>' @app.route('/user/<username>') def show_user(username): return f'User: {username}' @app.route('/post/<int:post_id>') def show_post(post_id): return f'Post ID: {post_id}' # 重定向示例 @app.route('/old-route') def old_route(): # 重定向到新路由 return redirect(url_for('index'))

请求对象

使用 request 对象
from flask import Flask, request app = Flask(__name__) @app.route('/example', methods=['GET', 'POST']) def example(): # 获取查询参数 name = request.args.get('name', 'Guest') # 获取表单数据 if request.method == 'POST': username = request.form.get('username') email = request.form.get('email') # 获取 JSON 数据 if request.is_json: data = request.get_json() # 获取文件上传 file = request.files.get('file') # 获取请求头 user_agent = request.headers.get('User-Agent') # 获取 cookies session_id = request.cookies.get('session_id') return f'Method: {request.method}<br>Name: {name}<br>User Agent: {user_agent}<br>Path: {request.path}<br>URL: {request.url}'

响应对象

自定义响应
from flask import Flask, make_response, jsonify, redirect app = Flask(__name__) @app.route('/') def index(): return "Hello World" # 默认返回 200 OK @app.route('/json') def return_json(): return jsonify({"status": "success", "message": "Hello JSON"}) @app.route('/custom') def custom_response(): response = make_response("Custom Response") response.status_code = 201 response.headers["Content-Type"] = "text/plain" response.set_cookie("username", "john") return response @app.route('/redirect') def redirect_example(): return redirect("/") @app.route('/not-found') def not_found(): return "Page not found", 404 @app.route('/error') def server_error(): return "Internal Server Error", 500
提示: 这是一个重要的概念,需要特别注意理解和掌握。
注意: 这是一个常见的错误点,请避免犯同样的错误。

评论

登录 后发表评论