flask+python上传个人用户头像
时间: 2024-10-10 10:14:48 浏览: 31
Flask购物商城(python+MySQL)
5星 · 资源好评率100%
在Flask框架下,使用Python处理个人用户上传头像,主要包括以下几个步骤:
1. **设置环境**:
安装必要的库,如Flask (`pip install flask`) 和 `Flask-WTF` (`pip install Flask-WTF`), 可能还需要用于处理文件的`werkzeug` (`pip install Werkzeug`)。
2. **配置文件上传**:
在`config.py`或相关配置文件中,设置上传文件的目录:
```python
UPLOAD_FOLDER = os.path.join(BASE_DIR, 'uploads')
ALLOWED_EXTENSIONS = {'jpg', 'jpeg', 'png'}
MAX_CONTENT_LENGTH = 16 * 1024 * 1024 # 设置文件最大大小(这里假设16MB)
```
3. **HTML模板**:
创建一个表单让用户上传文件,如:
```html
<form method="POST" enctype="multipart/form-data">
<div>
<label for="avatar">上传头像:</label>
<input type="file" id="avatar" name="avatar">
</div>
<button type="submit">上传</button>
</form>
```
4. **处理文件上传**:
在Flask视图中接收文件,检查文件类型和大小:
```python
from flask_wtf import FlaskForm
from wtforms import FileField
from wtforms.validators import InputRequired, FileAllowed
class AvatarForm(FlaskForm):
avatar = FileField('头像', validators=[InputRequired(), FileAllowed(ALLOWED_EXTENSIONS)])
@app.route('/upload-avatar', methods=['POST'])
def upload_avatar():
form = AvatarForm()
if form.validate_on_submit():
avatar_file = form.avatar.data
if not avatar_file:
return "请选择头像"
# 检查文件大小
if avatar_file.content_length > MAX_CONTENT_LENGTH:
return "头像过大,请选择小于 {} MB 的图片".format(MAX_CONTENT_LENGTH / (1024*1024))
filename = secure_filename(avatar_file.filename)
save_path = os.path.join(UPLOAD_FOLDER, filename)
avatar_file.save(save_path)
# 这里可以将文件名保存到数据库中,关联到用户,例如:
user = User.query.get_or_404(user_id)
user.avatar_url = url_for('static', filename='uploads/' + filename)
db.session.commit()
return {"message": "头像上传成功"}
else:
return "上传错误", 400
```
5. **URL生成**:
利用Flask的`url_for`函数生成静态文件路由,返回给前端。
6. **安全性注意**:
确保文件目录权限安全,防止恶意访问。使用CSRF保护防止跨站请求伪造攻击。
阅读全文