Flask核心技能:从零上手视图函数

news/2025/12/10 8:43:01/文章来源:https://www.cnblogs.com/ymtianyu/p/19329226

想快速上手Flask,却被视图函数绕晕了头? 要知道,超过80%的Flask核心逻辑都编写在视图函数里,掌握它,你就拿下了Flask开发的半壁江山!

本文为你清晰拆解Flask视图函数的方方面面:从基本定义、请求数据获取、响应返回到错误处理与状态码设置。你将学到如何让视图函数既健壮又好用,并附上一个可直接运行的完整示例。

🚀 目录一览

- 视图函数是什么?
- 如何定义一个视图函数?
- 如何处理请求数据?(GET/POST)
- 如何返回多样化的响应?
- 如何进行错误处理?
- 如何理解和使用状态码?
- 完整代码示例

🤔 视图函数是什么?

简单说,视图函数就是你为某个特定的URL(路由)编写的处理函数。当用户访问这个URL时,Flask就会调用这个函数,并将函数的返回值作为响应发送给用户的浏览器。

它是连接请求(Request)响应(Response)的核心桥梁,是你实现业务逻辑的主要舞台。

✏️ 如何定义一个视图函数?

定义视图函数只需两步:1. 使用 @app.route 装饰器绑定URL;2. 编写一个Python函数。

from flask import Flask
app = Flask(__name__)# 1. 绑定路由 ‘/‘
@app.route('/')
def index():# 2. 编写处理逻辑return '欢迎来到首页!'# 带变量的路由
@app.route('/user/')
def show_user_profile(username): # 变量名必须与路由中一致return f'用户:{username}'

装饰器是关键,它告诉Flask哪个URL触发哪个函数。

📥 如何处理请求数据?(GET/POST)

Web应用的核心是与用户输入互动。Flask的 request 对象封装了所有请求数据。

from flask import request# 处理GET请求的查询参数:/search?q=keyword
@app.route('/search')
def search():keyword = request.args.get('q', '') # 安全获取参数,避免KeyErrorreturn f'搜索关键词:{keyword}'# 处理POST请求的表单数据(如登录)
@app.route('/login', methods=['POST']) # 必须指明methods
def login():username = request.form.get('username')password = request.form.get('password')# ... 验证逻辑 ...return f'用户 {username} 尝试登录'# 处理JSON格式的请求体(常见于API)
@app.route('/api/data', methods=['POST'])
def receive_data():json_data = request.get_json() # 直接解析为字典/列表return {'received': json_data}, 200

记住:request.args 用于GET查询参数,request.form 用于POST表单数据,request.get_json() 用于JSON数据。

📤 如何返回多样化的响应?

视图函数可以返回多种类型的响应,不仅仅是字符串。

from flask import render_template, jsonify, redirect, url_for, make_response# 1. 返回字符串(默认)
@app.route('/hello')
def hello():return 'Hello, World!'# 2. 返回JSON(构建API必备)
@app.route('/user/')
def get_user(user_id):user_data = {'id': user_id, 'name': '张三'}return jsonify(user_data) # 自动设置Content-Type为application/json# 3. 返回HTML模板
@app.route('/home')
def home():return render_template('home.html', title='主页')# 4. 重定向
@app.route('/old')
def old_endpoint():return redirect(url_for('home')) # 重定向到‘home’函数对应的URL# 5. 自定义响应对象(设置Header、Cookie等)
@app.route('/custom')
def custom_response():resp = make_response(render_template('index.html'))resp.set_cookie('token', 'abc123')resp.headers['X-Custom-Header'] = 'Value'return resp

使用 jsonify() 返回JSON,render_template() 返回渲染的HTML,redirect() 进行页面跳转,这是最常用的三种方式。

⚠️ 如何进行错误处理?

优雅地处理错误能极大提升用户体验。Flask允许你为特定错误码定制页面或响应。

from flask import render_template# 1. 使用装饰器注册错误处理器
@app.errorhandler(404)
def page_not_found(error):# 可以返回模板,也可以返回JSON(针对API)return render_template('404.html'), 404 # 必须返回错误码@app.errorhandler(500)
def internal_server_error(error):return '服务器内部错误,请稍后再试!', 500# 2. 在视图函数中手动触发错误
@app.route('/admin')
def admin():# 假设用户未登录,则返回403禁止访问# 可以使用 abort() 函数立即中断并返回错误响应from flask import abortabort(403)

@app.errorhandler 是自定义错误页面的标准方法,别忘了在返回值里指明状态码。

🔢 如何理解和使用状态码?

HTTP状态码是服务器对请求的“回应语”。在Flask中,你可以轻松设置它。

常见状态码:

- 200 OK:请求成功(Flask返回字符串或模板时默认)
- 301/302:重定向(`redirect()` 默认返回302)
- 400 Bad Request:客户端请求错误
- 404 Not Found:资源不存在
- 500 Internal Server Error:服务器内部错误

设置方法很简单,在返回值后加上数字即可:

@app.route('/created')
def created():# 创建成功,返回201 Created状态码return '资源已创建', 201@app.route('/no_content')
def no_content():# 处理成功,但无内容返回,返回204 No Contentreturn '', 204

🧪 完整代码示例

将以上知识点融合,下面是一个功能较全的Flask应用示例:

from flask import Flask, request, jsonify, render_template_string, abortapp = Flask(__name__)# 首页,返回字符串
@app.route('/')
def index():return '欢迎!试试访问 /hello?name=你的名字 或向 /submit 发送POST请求。'# 处理GET请求和查询参数
@app.route('/hello')
def hello():name = request.args.get('name', '陌生人')return f'你好,{name}!'# 处理POST请求和表单数据
@app.route('/submit', methods=['POST'])
def submit():data = request.form.get('data')if not data:return '未接收到数据', 400 # 客户端错误return jsonify({'status': 'success', 'received_data': data})# 带变量路由和模拟API
@app.route('/api/users/')
def get_user_api(user_id):if user_id > 100:abort(404, description="用户不存在") # 触发404错误return jsonify({'user_id': user_id, 'name': '测试用户'})# 自定义404错误处理
@app.errorhandler(404)
def not_found(error):# 返回一个简单的HTML错误页面html_template = '''<h1>页面走丢啦!</h1><p>{{ error_description }}</p>'''return render_template_string(html_template, error_description=error.description), 404if __name__ == '__main__':app.run(debug=True)

复制以上代码到 app.py,运行 python app.py,即可在本地体验所有功能。


喜欢本文?不要错过✨,点赞👍收藏⭐关注我👆,一起学习更多有用的知识,完善你我的技能树!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/996034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年质量好的单极性脉冲电源厂家信誉综合榜(权威) - 行业平台推荐

2025年质量好的单极性脉冲电源厂家信誉综合榜(权威)行业背景与市场趋势随着工业自动化、新能源、半导体制造等领域的快速发展,单极性脉冲电源作为关键电子设备组件,其市场需求呈现持续增长态势。2024-2025年,全球…

2025年张家港汽车贴膜门店年度排名:服务不错、信誉好的商铺 - 工业推荐榜

为帮助张家港及周边车主高效锁定适配自身需求的汽车贴膜服务商,避免选型走弯路,我们从技术落地能力(如贴膜工艺精度、设备专业性)、服务质量(含施工环境标准、售后保障体系)、真实客户口碑(侧重同行业项目反馈)…

2025年实力强的商用音乐平台排行榜,诚信的商用音乐品牌企业 - 工业品牌热点

为帮助企业与创作者高效锁定适配自身需求的商用音乐合作伙伴,避免版权侵权风险与选品走弯路,我们从版权合规性(如独立证书覆盖度、侵权风险保障)、曲库资源丰富度(含风格多样性、热门内容储备)、服务场景适配性(…

2025年五大靠谱装修公司推荐,口碑不错的装修品牌企业全解析 - mypinpai

在追求品质生活的当下,一个舒适美观的居住空间是多数家庭的理想追求。面对市场上鱼龙混杂的装修服务,如何挑选一家靠谱的装修公司成为许多业主的难题。以下依据不同装修需求类型,为你推荐2025年十大靠谱装修公司,助…

2025年热门的并网电源定制/双向电源定制品牌厂家排行榜 - 品牌宣传支持者

2025年热门的并网电源定制/双向电源定制品牌厂家排行榜行业背景与市场趋势随着全球能源结构转型加速推进,并网电源与双向电源市场迎来了前所未有的发展机遇。2024-2025年,在碳中和目标驱动下,分布式能源系统、智能微…

2025年口碑好的脉冲电源定制用户口碑最好的厂家榜 - 行业平台推荐

2025年口碑好的脉冲电源定制用户口碑的厂家榜开篇:行业背景与市场趋势随着工业4.0和智能制造时代的到来,脉冲电源作为关键电子设备在各行各业的应用日益广泛。从半导体制造、新能源开发到医疗设备、科研实验,高品质…

铸铝门庭院门专用塑粉厂家哪家好?2025塑粉生产厂家盘点 - 栗子测评

在门业制造领域,塑粉是决定铸铝门、庭院门外观质感与耐用性的关键材料。优质的专用塑粉能让门体兼具抗腐蚀、抗紫外线和美观的特性,而劣质塑粉则会导致门体短期内出现掉粉、褪色等问题。随着居民对入户门和庭院门品质…

实用指南:【JVM】Java为啥能跨平台?JDK/JRE/JVM的关系?

实用指南:【JVM】Java为啥能跨平台?JDK/JRE/JVM的关系?2025-12-10 08:33 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important…

2025外地靠谱的门店信息采集公司TOP5推荐:门店信息采集 - 工业推荐榜

数字化时代,线下终端数据是品牌决策的核心依据,但65%的品牌方仍面临门店陈列监控难、广告效果追踪贵、市场调研数据失真等痛点。据《2024线下零售数字化报告》显示,仅30%的企业拥有完善的线下数据采集体系,超40%的…

2025-12-10 GitHub 热点项目精选

🌟 2025-12-10 GitHub Python 热点项目精选(15个)每日同步 GitHub Trending 趋势,筛选优质 Python 项目,助力开发者快速把握技术风向标~📋 项目列表(按 Star 数排序) 1. microsoft/VibeVoiceVibeVoice 是微软…

2025年南京设计水平高的包装盒厂家推荐,塑料包装盒厂家精选 - 工业品牌热点

为帮助企业精准锁定适配自身需求的包装盒生产合作伙伴,避免选型走弯路,我们从设计定制能力(如细分场景适配、创意结构实现)、品质管控体系(含环保合规性、工艺精度)、交付响应效率(覆盖小批量急单、大批量稳定供…

2025年苏州有实力的玻璃贴膜公司推荐:口碑好的玻璃贴膜品牌 - myqiye

在汽车后市场领域,玻璃贴膜不仅是提升驾驶体验的刚需,更是保护车辆与保障安全的关键环节。面对市场上鱼龙混杂的服务商,如何找到有实力的玻璃贴膜公司?如何甄别高性价比的玻璃贴膜企业?又怎样锁定口碑好的玻璃贴膜…

2025年安阳短视频运营推广服务公司口碑推荐,看哪家实力强 - mypinpai

在短视频流量红利见顶、内容同质化严重的2025年,企业想靠短视频获客,选对运营推广服务商是关键。面对安阳本地鱼龙混杂的服务商,如何找到口碑好、效果实、服务稳的伙伴?以下结合安阳及周边(林州、鹤壁、滑县、濮阳…

2025年中国十大HAST老化试验箱生产厂家推荐:H看哪家产 - mypinpai

本榜单依托行业技术参数评测、客户交付案例调研与售后口碑反馈,筛选出十家具备核心技术壁垒的环境检测设备生产企业,为电子、汽车、军工等领域企业选型提供客观依据,助力匹配适配的可靠性试验解决方案伙伴。 TOP1 推…

2025年质量好的机架钣金加工/非标钣金加工厂家口碑热榜(用户推荐) - 品牌宣传支持者

2025年质量好的机架钣金加工/非标钣金加工厂家口碑热榜(用户推荐)行业背景与市场趋势随着制造业的持续升级和智能化转型,钣金加工行业作为基础制造领域的重要组成部分,正迎来新一轮的发展机遇。2025年,中国钣金加…

开源神器!我用YOLOv8+FastAPI打造了一个视频关键帧提取工具,3秒处理30秒视频

🔥 开源神器!我用YOLOv8+FastAPI打造了一个视频关键帧提取工具,3秒处理30秒视频GitHub地址:https://github.com/MarcelLeon/key-face-frame ⭐️ 如果觉得有用,欢迎Star支持!一、为什么要做这个项目? 作为一个…