将个人资料图片添加到Flask上的数据库中



有一个注册表。如何将个人资料图片添加到数据库中并立即取回。我知道使用AJAX是可能的,但我不知道如何实现。我可以用BLOB类型将图像的名称发送到数据库,但不能在配置文件页面上打印我的图像。问题出在哪里?

Registration code:

from flask_mysqldb import MySQL
import MySQLdb.cursors
UPLOAD_FOLDER = 'static/uploads/'
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
firstname = request.form['firstname']
lastname = request.form['lastname']
email = request.form['email']
filenames = request.files['files']
uploaded_files = request.files.getlist("file[]")
filenames = []
for file in uploaded_files:
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'],filename))
filenames.append(filename)
cur = mysql.connection.cursor()
cur.execute('INSERT INTO users.data(filename) VALUES (%s)',(filename))
# This line is essential, store the data in session
session['filenames'] = filenames
cur = mysql.connection.cursor()
session['email'] = email
session['firstname'] = firstname
cur.execute('INSERT INTO users.data(firstname, lastname, email) VALUES (%s, %s, %s)', (firstname, lastname, email))
mysql.connection.commit()
cur.close()
return redirect(url_for('profile'))

profile.html:

@app.route('/profile', methods=['GET'])
def profile():
if request.method == 'GET':
return render_template('profile.html', data=data, filenames=filenames)

register.html:

<input type="firstname" name="firstname" placeholder="Firstname">
<input type="lastname" name="lastname" placeholder="Lastname">
<input type="email" name="email" placeholder="First name">
<input type='file' name="files" id="uploadPDF">
<button>Register</button>

profile.html:

<h2>Welcome, {{ firstname }}</h2>
{% for file in filenames %}
<h1>{{ file }}</h1>
{% endfor %}

所以,当你说立即取回时,我假设根据你的代码,你的意思是,在他们注册帐户后,你会将他们重定向到他们的个人资料页面,当他们被重定向时,他们的图片应该在第一次访问时显示,他们不必刷新或等待一段时间才能获得图片。如果我错了,请纠正你问题中的信息。

所以你需要在这里做很多事情。

A。你将如何保存这些图片。有两种(更简单的(方法可以做到这一点。

  1. 使用blob 列类型将图片的二进制数据存储到数据库中

  2. 使用长随机名称保存图片以避免与存储静态文件的硬盘发生冲突,然后将该图片的随机名称和所属用户的引用保存在数据库中进入下一节时,此选项是迄今为止最简单的

B。根据你所做的,当他们导航到他们的个人资料时,你现在必须检索图像

  1. 当他们导航到他们的个人资料时,你必须向服务器上的端点添加一个url,该url可以通过某种方式传递你需要的用户图片。然后从数据库中获取二进制数据,并将该数据作为文件返回。

  2. 当他们导航到自己的个人资料时,获取他们的用户id。查询该用户的个人资料图片所在的数据库,并获取您生成的随机名称。由于该文件保存在静态文件文件夹中,您只需添加静态文件夹url,并在末尾附加随机名称即可。例如,这个url可能看起来像这个https://example.com/static/somerandomlongnameforthispicture.jpg

http对如何从服务器检索内容非常基本/严格。现在,如果你想使用ajax来实现这一点,就像他们已经在他们的个人资料页面上一样,他们更新了他们的图片,并且你想立即显示更新,那么我解释的存储文件的逻辑是一样的,但你必须更新html中<img>标记的url,以指向你的服务器为新图片创建的文件名。或者只是强制刷新并让服务器端模板处理更新。

最新更新