✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️
Flask 实现网页显示图片功能解析
在本示例中,我们使用 Flask 框架创建了一个简单的 Web 应用程序,用于在网页上显示指定路径的图片。以下是对代码的详细分析:
代码结构与功能概述
- 导入模块:
从from flask import Flask, request, make_response from datetime import datetime import os
flask
库中导入Flask
、request
和make_response
类。Flask
用于创建 Web 应用,request
用于处理 HTTP 请求,make_response
用于创建 HTTP 响应。从datetime
模块导入datetime
类,用于获取当前时间。导入os
模块,用于操作系统相关的操作,不过在本代码中未实际使用到该模块的功能。 - 创建 Flask 应用实例:
创建一个app = Flask(__name__)
Flask
应用实例,__name__
是一个 Python 内置变量,用于指定应用的名称。这里__name__
会根据模块的导入方式而有所不同,在主程序中通常为__main__
。 - 定义图片路径常量:
定义一个常量IMG_PATH = "F:\pycharm/feature_match/4.jpg"
IMG_PATH
,表示要显示的图片的路径。请确保该路径是正确的,并且程序对该路径有读取权限。 - 定义路由和视图函数:
@app.route('/display/img/<string:filename>', methods=['GET']) def display_img(filename): request_begin_time = datetime.today() print("request_begin_time", request_begin_time) if request.method == 'GET': image_data = open(IMG_PATH, "rb").read() response = make_response(image_data) response.headers['Content-Type'] = 'image/jpg' return response else: pass
- 使用
@app.route
装饰器定义了一个路由/display/img/<string:filename>
,该路由接受一个字符串类型的参数filename
,并且只接受GET
方法的请求。 - 定义视图函数
display_img
,该函数接受filename
作为参数。 - 在函数内部,首先获取请求开始的时间
request_begin_time
,并打印出来。这可以用于记录请求的时间戳,方便后续的性能分析或日志记录。 - 检查请求方法是否为
GET
。如果是,使用open
函数以二进制读取模式("rb"
)打开指定路径的图片文件,并读取其内容到image_data
变量中。 - 使用
make_response
函数创建一个响应对象response
,并将读取的图片数据作为响应内容。 - 设置响应头的
Content-Type
为image/jpg
,这告诉浏览器该响应内容是一张 JPEG 格式的图片。 - 返回响应对象
response
。如果请求方法不是GET
,则不做任何处理(pass
)。
- 使用
- 运行 Flask 应用:
使用if __name__ == '__main__': app.run(host='10.16.55.26', port=5001)
if __name__ == '__main__':
语句来确保只有当脚本作为主程序运行时,才会执行app.run()
启动 Flask 应用。app.run()
方法启动 Flask 应用,host='10.16.55.26'
指定了应用监听的 IP 地址,port=5001
指定了应用监听的端口号。
访问与效果
通过在浏览器中访问 http://10.16.55.26:5001/display/img/4.jpg
(其中 10.16.55.26
是你自己的 IP 地址),浏览器会发送一个 GET
请求到该 URL。服务器接收到请求后,会执行 display_img
视图函数,读取指定路径的图片并将其作为响应内容返回给浏览器。浏览器识别到响应头的 Content-Type
为 image/jpg
,会将响应内容解析为一张图片并显示出来。
可能的改进与优化
- 错误处理:目前代码没有对文件读取失败的情况进行处理。例如,如果图片文件不存在或者路径错误,程序会抛出异常。可以添加异常处理代码,使程序更加健壮。
@app.route('/display/img/<string:filename>', methods=['GET']) def display_img(filename): request_begin_time = datetime.today() print("request_begin_time", request_begin_time) if request.method == 'GET': try: image_data = open(IMG_PATH, "rb").read() response = make_response(image_data) response.headers['Content-Type'] = 'image/jpg' return response except FileNotFoundError: return "图片文件未找到", 404 except Exception as e: return f"发生错误: {str(e)}", 500 else: pass
- 动态路径:当前代码中图片路径是固定的,可以考虑将图片路径作为参数传递,或者根据不同的
filename
参数动态生成图片路径,以实现更灵活的图片显示功能。 - 缓存控制:可以添加缓存控制头,以提高性能。例如,设置
Cache - Control
头来控制浏览器是否缓存图片。@app.route('/display/img/<string:filename>', methods=['GET']) def display_img(filename): request_begin_time = datetime.today() print("request_begin_time", request_begin_time) if request.method == 'GET': try: image_data = open(IMG_PATH, "rb").read() response = make_response(image_data) response.headers['Content-Type'] = 'image/jpg' response.headers['Cache - Control'] ='max - age = 3600' # 缓存 1 小时 return response except FileNotFoundError: return "图片文件未找到", 404 except Exception as e: return f"发生错误: {str(e)}", 500 else: pass
通过以上的分析和改进建议,你可以更好地理解和优化这个基于 Flask 的图片显示应用程序,使其更符合实际项目的需求。
✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️