flask上传头像并且保存在数据库
时间: 2024-10-10 09:14:37 浏览: 43
Flash上传头像并裁剪 + PHP后台
5星 · 资源好评率100%
在Flask应用中,上传头像并将其保存到数据库通常涉及几个步骤:
1. **设置文件处理**:
首先,你需要安装`Flask-WTF`库,它提供了一个方便的方式来处理文件上传。在`requirements.txt`中添加`WTF_CSRF_ENABLED=False`,以关闭跨站请求伪造(CSRF)验证。
2. **HTML模板**:
在前端模板中创建一个表单元素,比如`<input type="file">`,让用户选择文件。例如:
```html
<form method="post" enctype="multipart/form-data">
<input type="file" name="avatar" accept=".jpg, .jpeg, .png">
<button type="submit">上传</button>
</form>
```
3. **Flask视图函数**:
接收上传文件并处理。使用`request.files`获取上传的文件,然后对文件进行一些验证(如大小限制、内容类型),然后保存到临时目录。接着你可以将文件移动到数据库指定的存储路径,同时在数据库中插入一条记录关联这个文件路径。示例代码如下:
```python
from flask import Flask, request, redirect, url_for
from werkzeug.utils import secure_filename
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'path/to/upload/directory'
...
@app.route('/upload', methods=['POST'])
def upload_avatar():
if 'avatar' not in request.files:
return "No file selected"
avatar_file = request.files['avatar']
if not avatar_file:
return "No file uploaded"
filename = secure_filename(avatar_file.filename)
avatar_file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
# 假设你有一个User模型,有avatar_path字段
user = User()
user.avatar_path = filename
db.session.add(user)
db.session.commit()
return redirect(url_for('uploaded_file', filename=filename))
```
4. **文件URL生成**:
使用Flask的`url_for`函数生成指向已上传文件的URL,以便在需要的地方显示头像。
5. **安全性**:
考虑到安全性和隐私,不要直接将图片链接存入数据库,而是在需要时查询文件系统。
阅读全文