Flask学习笔记 - 视图函数

前言

继续自习...

Flask 视图函数

视图函数是Flask应用中的核心部分,它负责处理请求并生成响应

  1. 定义视图函数:视图函数是处理请求并返回响应的核心功能。
  2. 接收请求数据:使用 request 对象获取 URL 参数、表单数据、查询参数等。
  3. 返回响应:可以返回字符串、HTML、JSON 或自定义响应对象。
  4. 处理请求和响应:使用 request 对象和 make_response 来处理请求和生成自定义响应。
  5. 处理错误:视图函数内处理异常或使用 Flask 的错误处理机制。
  6. 视图函数的装饰器:使用 @app.before_request、@app.after_request 等装饰器处理请求前后逻辑。
  7. 视图函数返回的状态码:可以指定 HTTP 状态码来表示请求的处理结果。

定义视图函数/接收请求数据/返回响应/处理请求和响应

python 复制代码
from flask import request

# 接收 - URL参数
@app.route('/greet/<name>')  
def greet(name):
    return f'Hello, {name}!'

# 接收 - 表单数据
@app.route('/submit', methods=['POST'])  
def submit():
    username = request.form.get('username')  
    return f'Form submitted by {username}!'

# 接收 - GET请求中query
@app.route('/search')
def search():
    query = request.args.get('query')
    return f'Search results for: {query}'
    
# 返回 - 字符串
@app.route('/message')
def message():
    return 'This is a simple message.'

# 返回 - HTML模板
@app.route('/hello/<name>')
def html_hello(name):
    return render_template('hello.html', name=name)

# 返回 - JSON
@app.route('/api/data')
def api_data():
    data = {'key': 'value'}
    return jsonify(data)

# 返回 - 自定义响应对象
@app.route('/custom')
def custom_response():
    response = Response('Custom response with headers', status=200)
    response.headers['X-Custom-Header'] = 'Value'
    return response

# 处理请求和响应
@app.route('/info')
def info():
    user_agent = request.headers.get('User-Agent')
    return f'Your user agent is {user_agent}'

处理错误

可以在视图函数中处理异常或错误,或者通过 Flask 提供的错误处理机制来处理应用中的错误

python 复制代码
# try-except
# /divide/3/0
@app.route('/divide/<int:x>/<int:y>')
def divide(x, y):
    try:
        result = x / y
        return f'Result: {result}'
    except ZeroDivisionError:
        return 'Error: Division by zero', 400

# 全局错误
@app.errorhandler(404)
def not_found(error):
    return '消失了', 404

抛异常

正常

全局错误码

装饰器

  • @app.before_request:在每个请求处理之前运行的函数。
  • @app.after_request:在每个请求处理之后运行的函数。
  • @app.teardown_request:在请求结束后运行的函数,用于清理工作。
python 复制代码
@app.before_request
def before_request():
    print('请求前')

@app.after_request
def after_request(response):
    print('请求后')
    return response

@app.teardown_request
def teardown_request(exception):
    print('请求结束,清理')

看到终端有输出对应的日志

视图函数返回的状态码

视图函数不仅可以返回内容,还可以指定 HTTP 状态码。

python 复制代码
# 返回
@app.route('/status')
def status():
    return 'Everything is OK', 200

@app.route('/error')
def error():
    return Response('An error occurred', status=500)

工具栏 - 帮助 - 切换开发人员工具,可以打开开发工具,检查网络,确认确实返回了500的错误码

Demo

Flask

参考

  1. Flask 视图函数
相关推荐
源码站~2 小时前
基于 Flask 的电影评分与票房关联分析系统
后端·python·flask
vx_biyesheji000115 小时前
Python 全国城市租房洞察系统 Django框架 Requests爬虫 可视化 房子 房源 大数据 大模型 计算机毕业设计源码(建议收藏)✅
爬虫·python·机器学习·django·flask·课程设计·旅游
vx_biyesheji00011 天前
计算机毕业设计:Python多源新闻数据智能舆情挖掘平台 Flask框架 爬虫 SnowNLP ARIMA 可视化 数据分析 大数据(建议收藏)✅
爬虫·python·机器学习·数据分析·django·flask·课程设计
B站_计算机毕业设计之家2 天前
计算机毕业设计:Python当当网图书数据全链路处理平台 Django框架 爬虫 Pandas 可视化 大数据 大模型 书籍(建议收藏)✅
爬虫·python·机器学习·django·flask·pandas·课程设计
AC赳赳老秦2 天前
使用OpenClaw tavily-search技能高效撰写工作报告:以人工智能在医疗行业的应用为例
运维·人工智能·python·flask·自动化·deepseek·openclaw
小陈工2 天前
FastAPI性能优化实战:从每秒100请求到1000的踩坑记录
python·性能优化·django·flask·numpy·pandas·fastapi
工业互联网专业3 天前
基于Python的黑龙江旅游景点数据分析系统的实现_flask+spider
python·flask·vue·毕业设计·源码·课程设计·spider
大叔_爱编程3 天前
基于协同过滤算法的理财产品推荐系统-flask
python·flask·vue·毕业设计·源码·课程设计·协同过滤
阿梦Anmory3 天前
保姆级教程:Flask应用实现后台常驻运行(Linux服务器)
linux·服务器·flask
紫丁香3 天前
Dify源码深度剖析3
后端·python·ai·flask·fastapi