HoRain云小助手个人主页 个人专栏: 《Linux 系列教程》《c语言教程》⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。专栏介绍专栏名称专栏介绍《C语言》本专栏主要撰写C干货内容和编程技巧让大家从底层了解C把更多的知识由抽象到简单通俗易懂。《网络协议》本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘一起解密网络协议在运行中协议的基本运行机制《docker容器精解篇》全面深入解析 docker 容器从基础到进阶涵盖原理、操作、实践案例助您精通 docker。《linux系列》本专栏主要撰写Linux干货内容从基础到进阶知识由抽象到简单通俗易懂帮你从新手小白到扫地僧。《python 系列》本专栏着重撰写Python相关的干货内容与编程技巧助力大家从底层去认识Python将更多复杂的知识由抽象转化为简单易懂的内容。《试题库》本专栏主要是发布一些考试和练习题库涵盖软考、HCIE、HRCE、CCNA等目录⛳️ 推荐专栏介绍Flask 视图函数详解1. 基本视图函数最简单的视图带多个路由的视图2. 动态路由基本动态路由带类型转换的动态路由3. HTTP 方法处理指定允许的方法快捷方法装饰器4. 请求对象 (Request Object)获取请求数据5. 响应处理多种响应方式元组响应形式6. 会话和CookieCookie 操作Session 操作7. 错误处理自定义错误处理器8. 视图装饰器中间件自定义装饰器9. 蓝图中的视图函数10. 异步视图函数11. 请求钩子12. 实用技巧多个视图处理同一路由基于类的视图最佳实践Flask 视图函数详解视图函数是 Flask 应用的核心负责处理请求并返回响应。1.基本视图函数最简单的视图from flask import Flask app Flask(__name__) app.route(/) def index(): return Hello, World!带多个路由的视图app.route(/) app.route(/home) app.route(/index) def home(): return Home Page2.动态路由基本动态路由app.route(/user/username) def show_user(username): return fUser: {username}带类型转换的动态路由# 整数类型 app.route(/post/int:post_id) def show_post(post_id): return fPost ID: {post_id} # 浮点数类型 app.route(/weight/float:weight_kg) def show_weight(weight_kg): return fWeight: {weight_kg} kg # 字符串路径可包含斜杠 app.route(/path/path:subpath) def show_subpath(subpath): return fSubpath: {subpath} # UUID类型 app.route(/uuid/uuid:uuid_val) def show_uuid(uuid_val): return fUUID: {uuid_val}3.HTTP 方法处理指定允许的方法from flask import request app.route(/login, methods[GET, POST]) def login(): if request.method POST: # 处理POST请求 return Login POST request # 处理GET请求 return form methodpost input typetext nameusername input typesubmit /form 快捷方法装饰器app.get(/profile) def get_profile(): return GET Profile Page app.post(/profile) def post_profile(): return POST Profile Page4.请求对象 (Request Object)获取请求数据from flask import request app.route(/search) def search(): # GET参数 query request.args.get(q, ) page request.args.get(page, 1, typeint) # POST表单数据 if request.method POST: username request.form.get(username) password request.form.get(password) # JSON数据 if request.is_json: data request.get_json() # 上传的文件 file request.files.get(file) # 请求头 user_agent request.headers.get(User-Agent) return fSearch: {query}, Page: {page}5.响应处理多种响应方式from flask import make_response, jsonify, redirect, url_for, render_template app.route(/simple) def simple_response(): return Simple text response # 自动转为Response对象 app.route(/custom-response) def custom_response(): response make_response(Custom response) response.headers[X-Custom-Header] Value response.status_code 201 return response app.route(/json) def json_response(): return jsonify({name: Alice, age: 30}) app.route(/redirect) def redirect_example(): return redirect(url_for(index)) app.route(/error) def error_example(): abort(404) # 返回404错误元组响应形式app.route(/tuple-response) def tuple_response(): # (响应体, 状态码, 头部字典) return ( jsonify({error: Not found}), 404, {Content-Type: application/json} )6.会话和CookieCookie 操作from flask import make_response, request app.route(/set-cookie) def set_cookie(): resp make_response(Cookie set) resp.set_cookie(username, john, max_age3600) return resp app.route(/get-cookie) def get_cookie(): username request.cookies.get(username) return fHello {username}Session 操作from flask import session app.secret_key your-secret-key # 必须设置 app.route(/set-session) def set_session(): session[user_id] 123 session[username] john return Session set app.route(/get-session) def get_session(): user_id session.get(user_id) username session.get(username) return fUser: {username}, ID: {user_id}7.错误处理自定义错误处理器app.errorhandler(404) def page_not_found(error): return render_template(404.html), 404 app.errorhandler(500) def internal_error(error): return render_template(500.html), 500 app.errorhandler(Exception) def handle_exception(error): # 处理所有未捕获的异常 return An error occurred, 5008.视图装饰器中间件自定义装饰器from functools import wraps from flask import request, abort def login_required(f): wraps(f) def decorated_function(*args, **kwargs): if not session.get(logged_in): abort(401) return f(*args, **kwargs) return decorated_function app.route(/protected) login_required def protected_page(): return Protected content # 带参数的装饰器 def role_required(role): def decorator(f): wraps(f) def decorated_function(*args, **kwargs): if session.get(role) ! role: abort(403) return f(*args, **kwargs) return decorated_function return decorator app.route(/admin) role_required(admin) def admin_page(): return Admin only9.蓝图中的视图函数# admin/views.py from flask import Blueprint admin_bp Blueprint(admin, __name__, url_prefix/admin) admin_bp.route(/) def admin_index(): return Admin Dashboard admin_bp.route(/users) def list_users(): return User List10.异步视图函数import asyncio app.route(/async) async def async_view(): # 执行异步操作 result await asyncio.sleep(1, resultAsync response) return result11.请求钩子app.before_request def before_each_request(): # 每个请求前执行 print(fRequest: {request.path}) app.after_request def after_each_request(response): # 每个请求后执行 response.headers[X-Processed-By] Flask return response app.teardown_request def teardown_request(exceptionNone): # 请求结束后执行即使有异常 print(Request completed)12.实用技巧多个视图处理同一路由def view_one(): return View One def view_two(): return View Two # 动态决定使用哪个视图 app.add_url_rule(/dynamic, dynamic, lambda: view_one() if some_condition else view_two())基于类的视图from flask.views import MethodView class UserAPI(MethodView): def get(self, user_idNone): if user_id: return fGet user {user_id} return Get all users def post(self): return Create user def put(self, user_id): return fUpdate user {user_id} def delete(self, user_id): return fDelete user {user_id} # 注册路由 user_view UserAPI.as_view(user_api) app.add_url_rule(/users/, defaults{user_id: None}, view_funcuser_view, methods[GET]) app.add_url_rule(/users/, view_funcuser_view, methods[POST]) app.add_url_rule(/users/int:user_id, view_funcuser_view, methods[GET, PUT, DELETE])最佳实践保持视图简洁将业务逻辑移到单独的函数或类中使用类型提示提高代码可读性合理处理异常避免暴露敏感信息统一响应格式特别是API视图使用蓝图组织大型应用的视图添加文档字符串说明视图的功能和参数app.route(/api/users/int:user_id, methods[GET]) def get_user(user_id: int): 获取用户信息 Args: user_id: 用户ID Returns: 用户信息的JSON响应 Raises: 404: 用户不存在 user User.query.get_or_404(user_id) return jsonify(user.to_dict())视图函数是 Flask 应用与客户端交互的桥梁合理设计视图函数结构对应用的可维护性和性能至关重要。❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧