账号登录
用户名登录逻辑分析
用户名登录接口设计
用户名登录接口定义
1 @api.route("/sessions",methods=["POST"])
2 def login():
3 """用户登录
4 参数: 手机号、密码, json
5 """
用户名登录后端逻辑
1 @api.route("/sessions",methods=["POST"])
2 de flogin():
3 """用户登录
4 参数: 手机号、密码, json
5 """
6 # 获取参数
7 # 校验参数
8 # 手机号的格式
9 # 从数据库中根据手机号查询用户的数据对象
10 # 用数据库的密码与用户填写的密码进行对比验证
11 # 如果验证相同成功,保存登录状态, 在session中
退出登录
1 @api.route("/session", methods=["DELETE"])
2 def logout():
3 """登出"""
4 # 清除session数据
5 session.clear()
6 return jsonify(errno=RET.OK, errmsg="OK")
个人信息
登录装饰器
1 def login_required(view_func):
2
3 @functools.wraps(view_func)
4 def wrapper(*args, **kwargs):
5 # 判断用户的登录状态
6 user_id = session.get("user_id")
7
8 # 如果用户是登录的, 执行视图函数
9 if user_id is not None:
10 # 将user_id保存到g对象中,在视图函数中可以通过g对象获取保存数据
11 g.user_id = user_id
12 return view_func(*args, **kwargs)
13 else:
14 # 如果未登录,返回未登录的信息
15 return jsonify(errno=RET.SESSIONERR, errmsg="用户未登录")
16
17 return wrapper
用户上传头像
存储方案
保存到程序本地,磁盘满了要扩容
备份的问题
多机存储
多用户保存同一张图片,名字不一样,造成空间浪费
多用户上传同名文件,会出现覆盖之前的内容
文件存储解决方案
自己搭建文件存储系统
FastDFS 快速分布式文件存储系统(电商)
HDFS hadoop分布式文件系统
选择第三方服务
七牛云
七牛云平台
开发者中心:https://developer.qiniu.com/kodo/sdk/1242/python
密钥管理
上传文件示例代码
# -*- coding: utf-8 -*-
# flake8: noqa
from qiniu import Auth, put_file, etag
import qiniu.config
#需要填写你的 Access Key 和 Secret Key
access_key = 'Access_Key'
secret_key = 'Secret_Key'
#构建鉴权对象
q = Auth(access_key, secret_key)
#要上传的空间
bucket_name = 'Bucket_Name'
#上传后保存的文件名
key = 'my-python-logo.png'
#生成上传 Token,可以指定过期时间等
token = q.upload_token(bucket_name, key, 3600)
#要上传文件的本地路径
localfile = './sync/bbb.jpg'
ret, info = put_file(token, key, localfile)
print(info)
assert ret['key'] == key
assert ret['hash'] == etag(localfile)
用户上传头像接口设计
用户上传头像接口定义
1 @api.route("/users/avatar", methods=["POST"])
2 @login_required
3 # @api.before_request
4 def set_user_avatar():
5 """
6 设置用户的头像
7 参数: 图片(多媒体表单格式) 用户id (g.user_id)
8 """
修改用户名
修改用户名接口设计
修改用户名接口定义
1 @api.route("/users/name", methods=["PUT"])
2 @login_required
3 def change_user_name():
4 """修改用户名"""
20201127