欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 基于菜鸟教程的flask学习记录 —— Flask视图函数

基于菜鸟教程的flask学习记录 —— Flask视图函数

2025/4/17 21:08:45 来源:https://blog.csdn.net/qq_39991776/article/details/142304576  浏览:    关键词:基于菜鸟教程的flask学习记录 —— Flask视图函数

文章目录

  • 前言
  • Flask视图函数
    • 1.定义视图函数
    • 2.接收请求数据
      • (1)获取URL参数
      • (2)获取表单数据
      • (3)获取查询参数
    • 3.返回响应
      • (1)返回字符串
      • (2)返回HTML模板
      • (3)返回JSON数据
      • (4)返回自定义响应对象
    • 4.处理请求和响应
    • 5.处理错误
      • (1)在视图函数中处理错误
      • (2)全局错误处理
    • 6.视图函数的装饰器
    • 7.视图函数返回的状态码
      • (1)指定 HTTP 状态码
      • (2)返回带有状态码的响应对象

前言

最近要写一个简单的前后端程序,所以打算学习flask,发现菜鸟教程写得很有条理,比较清晰,但是缺少了具体的网页。因此我让gpt根据flask代码生成了相应的前端界面,方便前后端交互,更加利于我对flask的学习,在此记录。

本博客是在菜鸟教程的基础上加上前端页面,如有侵权,请私信,我会删除此条博客。

用到的工具:
pycharm社区版

Flask视图函数

1.定义视图函数

视图函数是处理请求并返回响应的核心功能

falsk代码:(app.py)

from flask import Flaskapp = Flask(__name__)@app.route('/')
def home():return 'Hello, World!'

在pycharm运行:
在这里插入图片描述
然后打开网页127.0.0.1:5000:
在这里插入图片描述

2.接收请求数据

使用 request 对象获取 URL 参数、表单数据、查询参数等

(1)获取URL参数

flask:

from flask import Flaskapp = Flask(__name__)@app.route('/')
def home():return 'Hello, World!'@app.route('/greet/<name>')
def greet(name):return f'Hello, {name}!'if __name__ == '__main__':app.run(debug = True)

@app.route(‘/greet/’)中,<name> 是一个 URL 参数,传递到视图函数 greet。

访问网页:127.0.0.1:5000/greet/(随便一个名字),结果如下:

在这里插入图片描述

(2)获取表单数据

项目组织结构:
在这里插入图片描述
flask:(app.py)

from flask import Flask, request, render_templateapp = Flask(__name__)@app.route('/')
def home():return render_template('hello.html') #使用 Jinja2 模板引擎来渲染 HTML 页面@app.route('/submit', methods=['POST'])
def submit():username = request.form.get('username')return f'Form submitted by {username}!'if __name__ == '__main__':app.run(debug = True)

前端:(hello.html,放在templates文件夹下)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Submit Form</title>
</head>
<body><h1>Submit Form</h1><form action="/submit" method="POST"><label for="username">Username:</label><input type="text" id="username" name="username"><button type="submit">Submit</button></form>
</body>
</html>

访问网页:

在这里插入图片描述

输入Username为sxy后,点击Submit:

在这里插入图片描述

(3)获取查询参数

项目组织结构:
在这里插入图片描述
flask:

from flask import Flask, request, render_templateapp = Flask(__name__)@app.route('/')
def home():return render_template('hello.html')@app.route('/search')
def search():query = request.args.get('query')return f'Search results for: {query}'if __name__ == '__main__':app.run(debug = True)

前端:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Submit Form</title>
</head>
<body><h1>Search Form</h1><!-- Search Query Form --><form action="/search" method="GET"><label for="query">Search:</label><input type="text" id="query" name="query"><button type="submit">Search</button></form>
</body>
</html>

访问网页:

在这里插入图片描述
输入sxy后点击Search:

在这里插入图片描述

3.返回响应

可以返回字符串、HTML、JSON 或自定义响应对象。

(1)返回字符串

from flask import Flaskapp = Flask(__name__)@app.route('/message')
def message():return 'This is a simple message.'if __name__ == '__main__':app.run(debug = True)

访问网页:

在这里插入图片描述

(2)返回HTML模板

flask:

from flask import Flask,render_templateapp = Flask(__name__)@app.route('/hello/<name>')
def hello(name):return render_template('hello.html', name=name)if __name__ == '__main__':app.run(debug = True)

前端:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Hello {{ name }}</title>
</head>
<body><h1>Hello, {{ name }}!</h1><p>Welcome to the Flask app.</p>
</body>
</html>

访问网页:

在这里插入图片描述

(3)返回JSON数据

flask:

from flask import Flask,jsonifyapp = Flask(__name__)@app.route('/api/data')
def api_data():data = {'key': 'value'}return jsonify(data)if __name__ == '__main__':app.run(debug = True)

访问网页:

在这里插入图片描述

(4)返回自定义响应对象

flask:

from flask import Flask,Responseapp = Flask(__name__)@app.route('/custom')
def custom_response():response = Response('Custom response with headers', status=200)response.headers['X-Custom-Header'] = 'Value'return responseif __name__ == '__main__':app.run(debug = True)

对上述代码的解释:

response = Response(‘Custom response with headers’, status=200)

Response 是 Flask 提供的类,允许手动构造 HTTP 响应。

‘Custom response with headers’ 是响应的主体内容,即返回给客户端的文本数据。

status=200 是 HTTP 状态码,表示成功处理了请求。可以根据需要修改状态码,例如 404(未找到)、500(服务器错误)等。

response.headers[‘X-Custom-Header’] = ‘Value’

response.headers 是一个字典对象,用于存储 HTTP 响应的头部信息。你可以向它添加或修改头部信息。

X-Custom-Header 是一个自定义的 HTTP 头部名,Value 是它的值。HTTP 头部可以传递额外的元数据,如内容类型、缓存控制信息或任何自定义信息。

自定义的头部通常以 X- 开头,但现代规范允许直接使用有意义的名称。

访问网页:

在这里插入图片描述
查看自定义头部信息:

在这里插入图片描述
此时,若是修改flask中的status为404,再用curl查看:

在这里插入图片描述

4.处理请求和响应

使用 request 对象和 make_response 来处理请求和生成自定义响应。

flask:

from flask import Flask,request,make_responseapp = Flask(__name__)@app.route('/info')
def info():user_agent = request.headers.get('User-Agent')return f'Your user agent is {user_agent}'@app.route('/header')
def custom_header():response = make_response('Response with custom header')response.headers['X-Custom-Header'] = 'Value'return responseif __name__ == '__main__':app.run(debug = True)

访问网页:

使用 request 对象:

在这里插入图片描述
使用 make_response:

在这里插入图片描述

5.处理错误

视图函数内处理异常或使用 Flask 的错误处理机制。

(1)在视图函数中处理错误

flask:

from flask import Flaskapp = Flask(__name__)@app.route('/divide/<int:x>/<int:y>')
def divide(x, y):try:result = x / yreturn f'Result: {result}'except ZeroDivisionError:return 'Error: Division by zero', 400if __name__ == '__main__':app.run(debug = True)

如果除数为0会报错:

在这里插入图片描述
如果除数不为0则不会报错:

在这里插入图片描述

(2)全局错误处理

from flask import Flaskapp = Flask(__name__)@app.errorhandler(404)
def not_found(error):return 'Page not found', 404if __name__ == '__main__':app.run(debug = True)

在这里插入图片描述

6.视图函数的装饰器

使用 @app.before_request、@app.after_request 等装饰器处理请求前后逻辑。

@app.before_request:在每个请求处理之前运行的函数。
@app.after_request:在每个请求处理之后运行的函数。
@app.teardown_request:在请求结束后运行的函数,用于清理工作。

flask:

from flask import Flaskapp = Flask(__name__)@app.before_request
def before_request():print('Before request')@app.after_request
def after_request(response):print('After request')return response@app.teardown_request
def teardown_request(exception):print('Teardown request')@app.route('/')
def home():return 'Hello World'if __name__ == '__main__':app.run(debug = True)

访问网页:
在这里插入图片描述
之后可以在pycharm终端看到输出:

在这里插入图片描述

7.视图函数返回的状态码

可以指定 HTTP 状态码来表示请求的处理结果。

(1)指定 HTTP 状态码

flask:

from flask import Flaskapp = Flask(__name__)@app.route('/status')
def status():return 'Everything is OK', 200@app.route('/')
def home():return 'Hello World'if __name__ == '__main__':app.run(debug = True)

访问网页:

在这里插入图片描述

(2)返回带有状态码的响应对象

flask:

from flask import Flask,Responseapp = Flask(__name__)@app.route('/error')
def error():return Response('An error occurred', status=500)@app.route('/')
def home():return 'Hello World'if __name__ == '__main__':app.run(debug = True)

访问网页:

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词