装饰器的测试
我们选择文件点击上传
可以看到
现在我们去写个这路由,晚上上传图片的功能
我们创建一个profile用来写个人中心的一些功能
from . import api
@api.route('/users/avatar', methods = ["POST"])
def set_user_avatar():
"""设置用户头像"""
我们要设置用户头像,那么就必须登陆
所以就用到我们上一章定义的装饰器了
# view_func---被装饰的函数
def login_required(view_func):
@functools.wraps(view_func)
def wrapper(*args, **kwargs):
# 判断用户的登陆状态,我们用user_id进行判断
user_id = session.get('user_id')
if user_id is not None:
# 已登陆
g.user_id = user_id
return view_func(*args, **kwargs)
else:
# 未登录
return jsonify(errno=RET.SESSIONERR, errmsg='用户未登陆')
return wrapper
我们在profile.py文件中倒入我们自定义的装饰器
注意:这两个装饰器是有顺序的,必须先找到路由,然后再验证有没有登陆
然后别忘了把我们写的视图函数放到__init__.py文件中导入一下
我们在没有登陆的情况下访问my.html
然后点击修改,进入到上传图片的页面
我们选择完图片点击上传
他会直接跳转到登陆界面
成功!!
接下来我们思考头像上传到什么地方呢
文件存储方案选择
存储方案
- 保存到程序本地,磁盘满了要扩容
- 备份的问题
- 多机存储
- 多用户保存同一张图片,名字不一样,造成空间浪费
- 多用户上传同名文件,会出现覆盖之前的内容
文件存储解决方案
- 自己搭建文件存储系统
- FastDFS 快速分布式文件存储系统(电商)
- HDFS hadoop分布式文件系统
- 选择第三方服务
- 七牛云
我们这里使用七牛云:https://portal.qiniu.com/