flask项目1实战:4、个人中心(待完善)

在这里插入图片描述

(根据居然老师直播课内容整理)

一、登录装饰器

  • 有很多页面进入前需要判断用户是否登录,甚至会使用到用户信息
  • flask框架有一个钩子函数 和 before_request,每次请求前都会调用
  • 本项目不是所有页面都需要登录,不注册登录也可浏览部分页面
  • 还可以用装饰器,

1、定义装饰器函数

  • 该函数不属于业务逻辑函数,并且很多方法是共用的,建议定义在 utils包内commons.py 中
  • 定义闭包,@functools()
  • 在内层函数实现登录检查
    • 从session中取出user_id
    • 判断user_id是否为空
      • 为空,返回 错误信息:用户未登录
      • 存在,表示已登录,用g对象存储user_id ,返回被装饰函数
# lghome/commons.py

# view_func 被装饰的函数
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'
    # 上传后保存的文件名
    # key = 'my-python-logo.png'
    # 生成上传 Token,可以指定过期时间等
    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('上传图片失败')
    # print(ret)
    # print("-"*50)
    # print(info)

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"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值