东宝商城项目(三)——用户注册功能的实现(后端)

2023-10-26

        本文是我做项目过程中记录的学习笔记,用于记录项目开发流程,第一次做项目有很多不懂的地方,本文可读性暂时很差。

        我目前的学习目标是走完项目开发流程,知道独立开发一个项目并让项目上线需要经历哪些步骤,需要学到哪些知识点,现将遇到的问题记录如下:

  • 发送短信功能的实现需要企业购买相关短信服务才能实现,用户使用短信服务需要根据官方提供的文档,进行学习操作;发送短信的功能也可以使用flask-mail模块实现。
  • redis数据库官方版是基于Linux系统设计的,Linux知识我掌握的太少了,目前难以完成在Linux系统上配置redis,在后续学习过程中补上。

 

发送短信

用户注册时,需要填写手机号,然后服务端将发送验证码给收到的手机号。

发送短信功能的实现,我们可以选择阿里云短信服务,或者腾讯短信服务;

如果仅仅需要进行发送短信测试,可以考虑选择容联云短信服务,这个会简单很多。

发送短信模块需要解决的需求:

  • 一分钟之内只能发送一次短信
  • 发给客户的验证码应该保存起来,我们选用redis数据库

flask-limiter限流

1、flask-limiter功能

flask-limiter可以对客户端的访问频率进行限制

2、key_func

limiter对象有一个很重要的形参——key_func

参数key_func是判断函数,表示以何种条件判断算一次访问

例如:

limiter = Limiter(
    app,
    key_func=get_remote_address,
    default_limits=["1 per day", "2 per hour"]
)

3、 表示速率限制的两种方式

  • "100 per day"、"20 per hour"、"5 per minute"、"1 per second"
  • "100/day"、"20/hour"、"5/minute"、"1/second"

4、基于FBV的简单使用

@app.route("/slow")
@limiter.limit("1 per day")
def slow():
    return "24"

5、基于CBV的限频方式

app = Flask(__name__)
limiter = Limiter(app, key_func=get_remote_address)

class MyView(flask.views.MethodView):
    decorators = [limiter.limit("10/second")] # 重点,属性名字不能修改
    def get(self):
        return "get"

    def put(self):
        return "put"

redis数据库

1、保留flask-limiter限流记录

flask-limiter限流的记录会留存在内存中,为了可靠,我们选择将记录存储在redis中;

将flask-limiter限流记录存储到redis,需要配置下列信息:

# 采用Redis保存数据,默认是内存,需要安装flask-redis
RATELIMIT_STORAGE_URL = 'redis://127.0.0.1:6379/0'
# 限制策略:移动窗口:时间窗口会自动变化
RATELIMIT_STRATEGY = 'moving-window'

2、redis简介

redis是一种非关系型数据库(NoSQL),以Key-Value形式存储数据;关系型数据库是以二维表形式存储数据。

3、redis下载

到redis官方网站下载:redis.io

4、redis的安装与配置

官方的redis是基于Linux系统设计的,并不像Windows系统的软件一样带有.exe的程序;

在Linux系统上安装配置redis详细过程,待后期补充...

redis与Python的交互

1、安装redis模块

pip install redis

2、导入模块StrictRedis

from redis import StrictRedis

 这个模块提供了strictredis对象,用来连接redis服务器,并按照不同类型提供了不同方法,进行交互操作;

 

 

 

3、限流器和redis的整合

StrictRedis对象方法:

通过__init__创建对象,指定参数host/port与指定的服务器和端口连接,host默认为localhost,post默认为6379,db默认为0。

sr = StrictRedis(host='localhost',port=6379,db=0)
# 简写
sr = StrictRedis()

根据不同类型,拥有不同的实例方法可以调用,与前面学的redis命令对应,方法需要的参数与命令的参数一致。

4、保存验证码到redis

flask-redis模块

在flask框架中,使用redis可以直接使用flask-redis支持包,它是对redis.py的扩展,使用起来非常方便;安装命令为:

pip install flask-redis

flask-redis的配置:只需要在配置文件中增加REDIS_URL的配置即可。

REDIS_URL = "redis://:password@localhost:6379/0"
flask-redis 初始化同样非常简单,只需要两行代码即可。
redis_client = FlaskRedis()
...
redis_cline.init_app(app)

 

验证手机号码

将用户提交的注册手机号码存储到redis中,在验证手机号界面,服务器向用户输入的手机号码发送验证码,用来验证redis存储的手机号和客户收到验证码的手机号是否一致。

class AuthorizationCodeResource(Resource):

    """
    提交手机号和验证码,开始验证
    """
    def post(self):
        rp = RequestParser()
        rp.add_argument('phone', type=parser.mobile, required=True)
        rp.add_argument('code', type=parser.regex(r'^\d{4}$'), required=True)
        args = rp.parse_args()
        phone = args.phone
        code = args.code

        # 从redis数据库中得到之前保存的验证码
        key = 'shopping:code:{}'.format(phone)
        try:
            real_code = redis_client.get(key) # 从redis中返回的是字节数据
        except ConnectionError as e:
            current_app.logger.error(e)
            return {'message': 'redis db connect error.'},400
        # 开始校验
        if not real_code or real_code.decode() != code:
            return {'message': 'Invalid code.'},400

        return {'phone': phone, 'msg': 'code success.'}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

东宝商城项目(三)——用户注册功能的实现(后端) 的相关文章

随机推荐

  • CentOS7安装redis5.0并且搭建集群

    记录在两台虚拟机 版本 CentOS7 上搭建Redis集群 Redis版本 redis 5 0 4 过程如下 1 下载安装 首先在一台虚拟机A IP 192 168 1 103 上新建目录redis 接着进入该目录下 下载redis 5
  • openmp设置线程数目_线程池的参数、配置、基本概念

    线程池的概念和工作机制 概念 首先系统空闲时在创建大量线程 这些线程的集合成为线程池 线程的生老病死都由线程池来决定 工作机制 当有任务到来时 提交给线程池 由线程池来指定线程执行任务 线程池会在内部寻找是否有可以执行任务的线程 任务执行完
  • vue+go-gin+nginx实现后台管理系统

    前后端分离的经典后台管理系统 主要用到的技术和组件 前端 vuejs 组件element ui ant vue axios 后端 golang 框架go gin swagger组件 服务代理 nginx 过程中的疑难问题和关键点记录 一 n
  • IOS_swift文件系统

    func files 应用根目录 let dir NSHomeDirectory NSLog dir dir 文档目录 let doc NSSearchPathForDirectoriesInDomains DocumentDirector
  • HTML制作简单的页面

    一 HTML页面制作代码部分
  • Java的invoke方法

    如果读一些Java或者相关框架的源码 实际上一定会经常出现invoke方法的调用 在自己或者团队封装框架时 如果有时候弄得不好经常也会报invoke相关的错 invoke方法是干什么的 有什么具体用途 首先要了解invoke方法干什么的以及
  • ERROR! The server quit without updating PID file (/usr/local/mysql-5.5.32/data/zexi.pid).

    mysql启动时报错 root zexi mysql 5 5 32 etc init d mysqld start Starting MySQL ERROR The server quit without updating PID file
  • 数据库组合索引

    索引用于快速找出在某个列中有一特定值的行 不使用索引 MySQL必须从第1条记录开始然后读完整个表直到找出相关的行 还需要考虑每次读入数据页的IO开销 而如果采取索引 则可以根据索引指向的页以及记录在页中的位置 迅速地读取目标页进而获取目标
  • 信用卡评分笔记

    信用卡评分语言 R语言 python 信用卡评分模型 ROC曲线 lift曲线 lorenz曲线 logistic回归 ROC IV WOE gini KS lift
  • SpringBoot 实现启动项目后立即执行方法的几种方式

    在项目开发中某些场景必须要用到启动项目后立即执行方式的功能 如我们需要去初始化数据到redis缓存 或者启动后读取相应的字典配置等 这篇文章主要聊聊实现立即执行的几种方法 一 CommandLineRunner和ApplicationRun
  • 3. C++调试时显示代码所在文件 / 函数 / 行号信息

    1 说明 在执行C 代码时 有时希望知道当前代码所在的文件名 函数名和对应行号位置信息 方便快速定位到代码所在处 想要获取这些信息 可以使用C 提供的一些宏进行获取 2 简单说明 FILE 用于获取当前语句所在源文件的文件名 func 用于
  • 尤雨溪对 2022 Web前端生态趋势是这样看的

    文章目录 前言 开发范式 底层框架方面趋势 基于依赖追踪范式 基于依赖追踪范式 共同点 基于编译的响应式系统 统一模型的优势和代价 基于编译的运行是优化 Vue Vapor Mode input 工具链 原生语言在前端工具链中的使用 工具链
  • pytorch实战-图像分类(二)(模型训练及验证)(基于迁移学习(理解+代码))

    目录 1 迁移学习概念 2 数据预处理 3 训练模型 基于迁移学习 3 1选择网络 这里用resnet 3 2如果用GPU训练 需要加入以下代码 3 3卷积层冻结模块 3 4加载resnet152模 3 5解释initialize mode
  • imagej得到灰度图数据_ImageJ的高级使用方法

    今天我们继续来聊一聊ImageJ的高阶使用技巧 问题三 为什么总是全部圈起来的灰度值 有没有大神指导呢求助 本问题涉及免疫印迹 Western Blot 分析 提问者不能分别得到每个条带的值 灰度值0为纯黑 255为纯白 灰度值与光密度值
  • 网页数据库服务器连接超时,数据库服务器连接超时

    数据库服务器连接超时 内容精选 换一换 执行以下步骤创建数据库连接 单击工具栏上的或按 Ctrl N 连接到数据库服务器 弹出 新建 选择数据库连接 对话框 建立连接时 如果首选项文件损坏或首选项值无效 会显示如下错误信息 提示用户首选项值
  • Java记录一次百万级别数据扫表统计的任务

    一 需求 统计近200万商家数据 每日通过查询计费系统更新其余额 二 技术栈 抛开分布式定时任务系统Elastic Job之外 我们先优先把单系统极限优化挖掘出来 由于博主接手的是14年的老项目 本地甚至都无法启动 所以不尝试用高级玩法 数
  • ts 子组件中 定义的方法报错

    报错事例 typtscript 组件中定义方法报错 不能将类型 onRef ref any gt void 分配给类型 IntrinsicAttributes IntrinsicClassAttributes
  • Kubernetes組件介绍

    Apiserver 是公开Kubernetes API的Kubernetes控制平面的组件 Etcd 一致和高可用的键值存储用作Kubernetes的所有集群数据备份存储 Kube scheduler 它监视没有分配节点的新创建的pod 并
  • Drools规则引擎

    Drools规则引擎 Drools规则引擎 1 Drools简介 2 Drools入门案例 2 1 业务场景 2 2 maven坐标 2 3 编写xml配置文件 多方法 2 4 创建drl规则文件 2 5 单元测试 3 Drools基础语法
  • 东宝商城项目(三)——用户注册功能的实现(后端)

    本文是我做项目过程中记录的学习笔记 用于记录项目开发流程 第一次做项目有很多不懂的地方 本文可读性暂时很差 我目前的学习目标是走完项目开发流程 知道独立开发一个项目并让项目上线需要经历哪些步骤 需要学到哪些知识点 现将遇到的问题记录如下 发