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

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

优质文章推荐:

公众号使用指南

redis操作命令总结

前端中那些让你头疼的英文单词

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值