文件上传
- 上传的图片是 FileStorage
- 属性 :
- filename : 用户获取文件的名字
- 方法 :
- save(保存路径)
secure_filename
- 转换为安全的文件名。
- 示例:
>>> secure_filename("My cool movie.mov")
'My_cool_movie.mov'
>>> secure_filename("../../../etc/passwd")
'etc_passwd'
配置头像的上传目录
settings.py
# 项目路径
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# 静态文件夹路径
STATIC_DIR = os.path.join(BASE_DIR, 'static')
# 模板文件路径
TEMPLATE_DIR = os.path.join(BASE_DIR, 'templates')
# 头像文件路径
UPLOAD_ICON_DIR = os.path.join(STATIC_DIR, 'upload/icon')
用户修改
views.py
# 修改用户
@user_bp.route('/change', methods=['GET', 'POST'])
def user_change():
if request.method == 'POST':
username = request.form.get('username')
phone = request.form.get('phone')
email = request.form.get('email')
# 获取头像, 使用request.files
icon = request.files.get('icon')
# 查询手机号码
users = User.query.all()
for user in users:
if user.phone == phone:
# 说明数据库以及存在此号码
return render_template('user/center.html', user=g.user, msg='此号码已被注册')
# 获取上传的图片的名字
icon_name = icon.filename
# 获取文件的扩展名
suffix = icon_name.rsplit('.')[-1]
if suffix in ALLOWED_EXTENSIONS:
# 安全的文件名
icon_name = secure_filename(icon_name)
# 文件的上传路径
file_path = os.path.join(Config.UPLOAD_ICON_DIR, icon_name)
# 保存文件
icon.save(file_path)
user = g.user
user.username = username
user.phone = phone
user.email = email
# 数据库里的文件路径
path = 'upload/icon/'
user.icon = os.path.join(path, icon_name)
db.session.add(user)
db.session.commit()
return redirect(url_for('user.center'))
else:
return render_template('user/center.html', user=g.user, image_msg='扩展名必须是:jpg,png,gif,bmp')
return render_template('user/center.html', user=g.user)