(根据居然老师直播课内容整理)
一、登录装饰器
- 有很多页面进入前需要判断用户是否登录,甚至会使用到用户信息
- flask框架有一个钩子函数 和 before_request,每次请求前都会调用
- 本项目不是所有页面都需要登录,不注册登录也可浏览部分页面
- 还可以用装饰器,
1、定义装饰器函数
- 该函数不属于业务逻辑函数,并且很多方法是共用的,建议定义在 utils包内commons.py 中
- 定义闭包,@functools()
- 在内层函数实现登录检查
- 从session中取出user_id
- 判断user_id是否为空
- 为空,返回 错误信息:用户未登录
- 存在,表示已登录,用g对象存储user_id ,返回被装饰函数
def login_requre(view_func):
@functools.wrapper(view_func)
def wrapper(*args,**kwargs):
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
二、用户上传头像(修改用户信息)
1、七牛云图片上传功能封装
def storage(file_data):
q = Auth(access_key, secret_key)
bucket_name = 'home-image-flask'
token = q.upload_token(bucket_name, None, 3600)
ret, info = put_data(token, None, file_data)
if info.status_code == 200:
return ret.get('key')
else:
raise Exception('上传图片失败')
2、用户上传头像接口设计
2.1 请求方式
选项 |
方案 |
请求方法 |
POST |
请求地址 |
/users/avatar |
2.2请求参数:表单参数
参数名 |
类型 |
是否必传 |
说明 |
avatar |
file |
是 |
用户头像 |
2.3 响应结果
响应结果 |
响应内容 |
保存失败 |
响应错误提示 |
保存成功 |
返回当前页面 |
3、用户上传头像接口定义
- 首先应用登录装饰器
- 如果没有登录,直接返回 sessionerr,跳转到登录界面
- 进入函数后,首先获取g对象中的user_id
- 获取参数image_file
- 如果参数为None(即未传图片),返回报错
- 读取文件
- 保存图片
- 保存图片有以下几种方法
- 数据库服务器:对服务器性质、资源、数据软件要求高
- 服务器目录:防止文件重名等,资源、性能要求等,
- 第三方平台:如七牛云平台(个人系统推荐)
- 自己搭建文件存储服务器:如FastDFS 快速分布式文件存储系统,主要用于电商企业,以图片为主;HDFS Hadoop分布式文件系统(什么文件都行)
- 保存图片路径
- 将图片地址保存到数据库中,仅保存文件名即可,图片地址的前半部分域名保存常量文件中
lghome/api_1_0/profile.py
@api.route("/users/avatar"<