经典案例之某新闻网站的实现(二)

简介: 经典案例之某新闻网站的实现(二)

1.短信验证码分析

目的:为了校验是一个真实的用户,便于用户注册

注意点:

1/在获取短信验证码的时候需要携带的参数:手机号,随机字符串(uuid),图片验证码

2/使用云通讯发送短信


2.云通讯集成

的:能够使用云通讯发送短信

操作步骤:

1/先注册云通讯,创建应用

2/找到官方的demo实例下载

3/拷贝模板代码到自己的文件中(自己创建sms)

4/调用单例对象方法,发送短信即可


3.短信验证码接口

目的:当前端的页面点击获取短信验证码的时候,能够获取一条短信


请求路径: /passport/sms_code

请求方式: POST

请求参数: mobile, image_code,image_code_id

返回值: errno, errmsg

参数解释:

  参数名     类型     是否必须     参数说明  
  mobile     string     是     手机号  
  image_code     String     是     图片验证码内容  
  image_code_id     String     是     图片验证码编号  

返回值解释:

  参数名     类型     是否必须     参数说明  
  error     int     是     错误码  
  errmsg     String     是     错误信息  

操作流程:

1/获取参数

2/校验参数,图片验证码,随机字符串(是一个为空判断)

3/校验参数,手机号格式

4/发送短信,调用封装好的ccp

5/返回发送的状态

接口四要素:请求路径/请求方式(post)/请求参数(图片验证码,随机字符串和手机号)/返回值(jsonify)

但是上面的过程是不严谨的,我们后面会对其进行优化

4.短信验证码接口完善

目的:完善短信接口的编写

操作步骤:

1/获取参数

2/参数的为空校验

3/校验手机号的格式

4/通过图片验证码的编号获取图片验证码

5/判断图片验证码是否过期

6/判断图片验证码是否正确

7/删除redis中的图片验证码

8/生成一个随机的短信验证码,调用ccp发送短信,判断是否发送成功

9/将短信保存到redis

10/返回一个响应(成功或者是失败)





5.注册用户接口

目的:创建一个用户对象,保存在数据库中

请求路径:/passport/register

请求方式:POST

请求参数: mobile, sms_code,password

返回值: errno, errmsg

参数解释:

  参数名     类型     是否必须     参数说明  
  mobile     string     是     手机号  
  sms_code     String     是     短信验证码内容  
  password     String     是     密码  

返回值解释:

  参数名     类型     是否必须     参数说明  
  error     int     是     错误码  
  errmsg     String     是     错误信息  


操作步骤:

1/获取参数

2/校验参数,为空校验

3/手机号作为key,取出redis中的短信验证码

4/判断短信验证码是否过期

5/判断短信验证码是否正确

6/删除短信验证码

7/创建用户对象

8/设置用户对象的属性

9/保存用户到数据库中

10/返回响应


测试的时候我们可以将手机的验证码在工作区的控制台进行打印,不需要总是发短信,耗费财力.

6.注册用户接口完善

目的:使用flask中提供好的方法,快速将前端的json数据转成dict

传统方法,json转字典

1/json_data = request.data

2/dict_data = json.loads(json_data)

快速将json转字典的方法:

dict_data = request.json

或者dict_data = request.get_json()



7.注册用户密码

目的:使用flask中提供的安全模块,将密码进行加密

注意点:

1/@property装饰方法之后,可以被属性使用

2/@属性.setter,给方法增加一个设置方式

3/generator_password_hash()系统提供的加密方法

4/check_password_hash()系统提供的密码校验方法





8.登录接口

目的:写出登录接口,供前端的工程师来调用登录

请求路径: /passport/login

请求方式:POST

请求参数: mobile,password

返回值: errno, errmsg

参数解释:

  参数名     类型     是否必须     参数说明  
  mobile     string     是     手机号  
  password     String     是     密码  

返回值解释:

  参数名     类型     是否必须     参数说明  
  error     int     是     错误码  
  errmsg     String     是     错误信息  

操作步骤:

1/获取参数

2/校验参数,为空校验

3/通过用户的手机号到数据库查询用户对象

4/判断用户是否存在

5/校验用户密码是否正确

6/将用户的登录信息保存在session

7/返回响应



9.首页右上角用户显示

目的:在首页右上角显示用户的登录信息

请求路径:/

请求方式: GET

请求参数: 无

返回值:index.html页面, data数据

参数解释:

  参数名     类型     是否必须     参数说明  




返回值解释:

  参数名     类型     是否必须     参数说明  
  render_template     页面     是     渲染页面  
  data     字典     否     用户字典数据  

data数据格式解释:

  参数名     类型     是否必须     参数说明  
  user_info     字典     是     具体用户字典  

操作流程;

1/登录用户之后,已经将session信息存储在redis

2/当我们刷新首页的时候,去session中获取了user_id的值

3/然后将用户的字典数据,携带到index.html首页展示了


10.退出用户

目的:在认证蓝图中编写退出接口

对数据的增删改都用post请求,单是查询的时候我们只需要get就可以了

请求路径:/passport/logout

请求方式: POST

请求参数: 无

返回值: errno, errmsg

参数解释:

  参数名     类型     是否必须     参数说明  




返回值解释:

  参数名     类型     是否必须     参数说明  
  error     int     是     错误码  
  errmsg     String     是     错误信息  

操作流程:

1/清除session

session.pop(user_id,None)清除这个人,如果没有弹出None,以免报错

2/返回响应


11.用户最后登录时间

目的:记录用户的登录时间,为了方便后期进行用户的活跃统计

工具:

databases工具,可以在pycharm中连接数据,方便查询等操作

structure工具,可以查看当前文件的结构(当前模块中有哪些视图函数)





12.自动提交

目的:在flask通过sqlalchemy的属性配置,让数据库在视图函数结束的时候都能自动的提交

操作流程:

config的配置文件中,设置sqlalchemy_commit_on_teardown = True


设置好了之后,当数据库的内容改变之后,视图函数在结束的时候就会自动提交





13.CSRFProtect校验开启

目的:在前端当中携带csrf_token,以便csrf的校验都能通过

校验过程:

如果是非表单提交(ajax)

1/在cookie中设置csrf_token(自己做)

2/在请求头中设置csrf_token(自己做)

3/服务器:取出二者进行校验(服务器做的)

如果是表单提交

1/在表单中设置一个隐藏字段即可


cookie如果不设置有效期,每次会话结束后都会清空

CSRFProtect 一旦保护好app之后会对如下请求做校验POST,PATH,PUT,DELETE





14.热门新闻排行

根据点击量,将新闻进行降序排列,然后依次渲染显示到热门新闻排行.

请求路径: /

请求方式:GET

请求参数: 无

返回值: index.html页面, data数据,用户字典,新闻字典

参数解释:

  参数名     类型     是否必须     参数说明  




返回值解释:

  参数名     类型     是否必须     参数说明  
  render_template     页面     是     渲染页面  
  data     字典     否     新闻字典数据,用户字典数据  

data内容解释:

  参数名     类型     是否必须     参数说明  
  click_news_list     字典     是     基础新闻字典  
  user_info     字典     是     用户字典  

15.分类数据显示

目的:在首页的头部展示分类信息

请求路径:/

请求方式:GET

请求参数: 无

返回值:index.html页面, data数据,用户字典,新闻排行字典,分类字典

参数解释:

  参数名     类型     是否必须     参数说明  




返回值解释:

  参数名     类型     是否必须     参数说明  
  render_template     页面     是     渲染页面  
  data     字典     否     新闻字典数据  

data内容解释:

  参数名     类型     是否必须     参数说明  
  click_news_list     字典     是     基础新闻字典  
  user_info     字典     是     用户字典  
  categories     字典     是     分类字典  

操作流程:

1/在根路径中查询所有的分类数据

2/将分类数据转成字典列表

3/携带分类数据渲染页面


16.首页新闻列表展示

目的:编写新闻展示列表,获取新闻数据展示在首页中

请求路径: /newslist

请求方式: GET

请求参数: cid,page,per_page

返回值: data数据

参数解释:

  参数名     类型     是否必须     参数说明  
  cid     int     是     分类编号,默认最新  
  page     int     是     页数,默认第1页  
  per_page     int     是     每页多少条数据,默认10条  

返回值解释:

  参数名     类型     是否必须     参数说明  
  data     字典     否     没有data包含,直接响应  

data**参数详情如下:**

  参数名     类型     是否必须     参数说明  
  totalPage     int     否     总页数  
  currentPage         int     否     当前页面  
  cid     string     是     当前新闻数据的分类编号  
  newsList     列表list     否     新闻列表数据  

newsList内容如下:

  参数名     类型     是否必须     参数说明  
  newsList.title     string     是     新闻列表  
  newsList.source     string     是     新闻来源  
  newsList.create_time     string     是     新闻时间  
  newsList.index_image_url     string     是     新闻索引图片  

操作步骤:

1/获取参数

2/参数类型转换

3/分页查询

4获取到分页对象中的属性,总页数,当前页,当前页的对象列表

5/将对象列表转成字典列表

6/携带数据,返回响应


要求:

1/访问首页的时候进行展示.

2/数据渲染利用局部刷新,利用ajax

相关文章
|
算法 安全 机器人
Python语言如何使用MindOpt建模并求解二次规划问题
MindOpt是一款高效的优化算法软件包,求解算法实现了线性规划(LP)、混合整数线性规划(MILP)、二次规划(QP),可以支持命令行、c、c++、java和python调用。接下来我们将发布一系列文章,讲述各个语言如何使用 MindOpt 来求解数学规划问题。
Python语言如何使用MindOpt建模并求解二次规划问题
|
Java Shell 应用服务中间件
超详细总结docker镜像
超详细总结docker镜像
440 0
|
设计模式
「全网最细 + 实战源码案例」设计模式——抽象工厂模式
抽象工厂模式是一种创建型设计模式,提供接口用于创建一系列相关或依赖的对象,无需指定具体类。它解决了产品族问题,管理和创建一组相关产品。结构上包括抽象工厂、具体工厂、抽象产品和具体产品。适用于创建相关对象、产品族固定但种类变化的场景。优点是分离接口与实现、管理产品族方便且扩展性好;缺点是产品族扩展困难且代码复杂度增加。通过配置文件和反射机制可进一步改进,使系统更灵活易扩展。
295 17
|
机器学习/深度学习 数据采集 自然语言处理
【Deep Learning A情感文本分类实战】2023 Pytorch+Bert、Roberta+TextCNN、BiLstm、Lstm等实现IMDB情感文本分类完整项目(项目已开源)
亮点:代码开源+结构清晰+准确率高+保姆级解析 🍊本项目使用Pytorch框架,使用上游语言模型+下游网络模型的结构实现IMDB情感分析 🍊语言模型可选择Bert、Roberta 🍊神经网络模型可选择BiLstm、LSTM、TextCNN、Rnn、Gru、Fnn共6种 🍊语言模型和网络模型扩展性较好,方便读者自己对模型进行修改
1619 0
|
前端开发 关系型数据库 Java
基于SSM的宠物领养系统的设计与实现
基于SSM的宠物领养系统的设计与实现
1133 0
|
存储 C语言
C语言实现学生成绩管理系统
C语言实现学生成绩管理系统
718 2
|
存储 机器人 测试技术
AprilTags二维码的检测与应用
AprilTags二维码的检测与应用
2596 0
|
Web App开发 JavaScript 安全
Vue状态管理库Pinia详解
Pinia 是一款专为 Vue 设计的状态管理库,它提供了一套简洁且直观的 API,旨在简化状态管理流程。Pinia 的设计理念强调简单性和易用性,相较于 Vuex,它摒弃了许多复杂的概念如 mutations 和模块的深层嵌套结构,转而提供一种更现代化且与 Vue 3 Composition API 高度兼容的状态管理模式。
480 0
|
编译器 Linux
嵌入式 QT usb camera库驱动摄像头
嵌入式 QT usb camera库驱动摄像头
|
存储 监控 算法
探索 Java JVM:深入了解虚拟机的工作原理与优化
Java 虚拟机(JVM)是 Java 语言的核心组成部分,它在代码编译和运行过程中发挥着重要作用。理解 JVM 的工作原理和优化策略对于开发高效、稳定的 Java 应用至关重要。本文将深入探讨 JVM 的工作原理、主要组成部分和性能优化策略,帮助您更好地理解 JVM 在 Java 开发中的关键地位。