个人信息 模块的开发
本章主题
关键词
登录装饰器
def login_required(view_func):
@functools.wraps(view_func)
def wrapper(*args, **kwargs):
# 判断用户的登录状态
user_id = session.get("user_id")
# 如果用户是登录的, 执行视图函数
if user_id is not None:
# 将user_id保存到g对象中,在视图函数中可以通过g对象获取保存数据
g.user_id = user_id
return view_func(*args, **kwargs)
else:
# 如果未登录,返回未登录的信息
return jsonify(errno=RET.SESSIONERR, errmsg="用户未登录")
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)
用户上传头像接口设计
请求方式
选项 | 方案 |
---|---|
请求方法 | POST |
请求地址 | /users/avatar |
请求参数:表单参数
参数名 | 类型 | 是否必传 | 说明 |
---|---|---|---|
avatar | file | 是 | 用户头像 |
响应结果
响应结果 | 响应内容 |
---|---|
保存失败 | 响应错误提示 |
保存成功 | 返回当前页面 |
用户上传头像接口定义
@api.route("/users/avatar", methods=["POST"])
@login_required
# @api.before_request
def set_user_avatar():
"""
设置用户的头像
参数: 图片(多媒体表单格式) 用户id (g.user_id)
"""
修改用户名
修改用户名接口设计
请求方式
选项 | 方案 |
---|---|
请求方法 | PUT |
请求地址 | /users/name |
请求参数:表单参数
参数名 | 类型 | 是否必传 | 说明 |
---|---|---|---|
name | string | 是 | 用户名 |
响应结果
响应结果 | 响应内容 |
---|---|
保存失败 | 响应错误提示 |
保存成功 | 返回用户名 |
修改用户名接口定义
@api.route("/users/name", methods=["PUT"])
@login_required
def change_user_name():
"""修改用户名"""
总结小便条
本篇文章主要讲了以下几点内容:
本章回顾暂时就到这了,如果还有点晕,那就把文章里所有引用的案例代码再敲几遍吧。拜拜~