前言
继续学习…
Flask 视图函数
视图函数是Flask应用中的核心部分,它负责处理请求并生成响应
- 定义视图函数:视图函数是处理请求并返回响应的核心功能。
- 接收请求数据:使用 request 对象获取 URL 参数、表单数据、查询参数等。
- 返回响应:可以返回字符串、HTML、JSON 或自定义响应对象。
- 处理请求和响应:使用 request 对象和 make_response 来处理请求和生成自定义响应。
- 处理错误:视图函数内处理异常或使用 Flask 的错误处理机制。
- 视图函数的装饰器:使用 @app.before_request、@app.after_request 等装饰器处理请求前后逻辑。
- 视图函数返回的状态码:可以指定 HTTP 状态码来表示请求的处理结果。
定义视图函数/接收请求数据/返回响应/处理请求和响应
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| from flask import request
@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}!'
@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.'
@app.route('/hello/<name>') def html_hello(name): return render_template('hello.html', name=name)
@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 提供的错误处理机制来处理应用中的错误
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
@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:在请求结束后运行的函数,用于清理工作。
1 2 3 4 5 6 7 8 9 10 11 12
| @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 状态码。
1 2 3 4 5 6 7 8
| @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
参考
- Flask 视图函数