在python flask web应用程序上显示sqlite3数据库中的图片

anhgbhbe  于 2023-04-06  发布在  SQLite
关注(0)|答案(1)|浏览(208)

目标:使Web应用程序链接到数据库,Web应用程序的用户可以使用名称搜索数据库。相应名称的图像应显示为结果。
数据库如何组织:BLOB是png图像。
| 姓名|图像|
| --------------|--------------|
| 安|BLOB|
| 贝蒂|BLOB|
如果用户搜索名称“Ann”,则应显示Ann的图像。
我不知道如何从数据库中显示图片,并会非常感谢一些帮助。
这是app.py我目前拥有的www.example.com代码。

from flask import Flask, render_template, request, make_response,send_file
import sqlite3
app = Flask(__name__)
def Image(search):
    #selection of image from the images table
    conn3 = sqlite3.connect('<path to table>')
    conn3.row_factory  =  sqlite3.Row
    cursor3 = conn3.cursor()
    cursor3.execute("SELECT * FROM Images WHERE Name = ?",
    ("%"+search+"%",) )
    results3 = cursor3.fetchall()
    conn3.close

# content and code for the display page
@app.route('/display', methods = ["GET", "POST"])
def display():
    if request.method  ==  "POST":
        data  =  dict(request.form)
        image  =  Image(data["search"])
    else:
        image = []
    return render_template('display.html', image = image)

这是template文件夹中的display.html代码。

<!--- PAGE SCALING STATEMENTS - REQUIRED --->

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1">

<!--- SEARCH BAR FORMATING --->

<form method="post">

  <label for="search"> Case Sensitive Search Bar</label>

  <br>

  <input type="text" name="search" required>

  <input type="submit" value="Search">

  <br>

  <br>

{% if image | length != 0 %}

<img src="{{ image }}" alt="image">

{% else %}

<div id="picture"> No image found</div>

{% endif %}

我刚刚开始编码,这是我的第一个项目之一。任何帮助/建议都非常感谢!!:)

kb5ga3dv

kb5ga3dv1#

代码中的一些问题:
1.案例没有正确遵循,图像是我假设的一种方法。
1.图像方法未返回结果
修改后的Image(getImage或get_image)方法代码将为

def Image(search):
    #selection of image from the images table
    conn3 = sqlite3.connect('<path to table>')
    conn3.row_factory  =  sqlite3.Row
    cursor3 = conn3.cursor()
    cursor3.execute("SELECT * FROM Images WHERE Name = ?",
    ("%"+search+"%",) )
    row = curose.fetchone()
    conn3.close()
    if row is not None:
        return row[0] --- This is hopefully your image bytes.
    else:
        return None

在这里,我们假设DB中的Image字段保存的是二进制数据。这需要使用以下方法转换为base64等效值:

encoded_image = base64.b64encode(image_data).decode("utf-8")

现在这个encoded_image可以传递给你的render函数了。

return render_template('display.html', encoded_image = encoded_image)

最后,这个base54encoded String可以从前端使用下面的html查看:

<img src="data:image/png;base64,{{ image_data }}" alt="image">

当然,这将使你的代码工作,但你需要照顾验证,空检查等。
同样的用例,如果在这里很好地解释:
How to pass Base64 image string from Flask Python code to HTML?
希望这能起作用,继续学习。

相关问题