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



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/返回一个响应(成功或者是失败)



经典案例之某新闻网站的实现(二)_参数说明_02



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()​​系统提供的密码校验方法



经典案例之某新闻网站的实现(二)_短信验证码_03



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​​工具,可以查看当前文件的结构(当前模块中有哪些视图函数)

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

经典案例之某新闻网站的实现(二)_短信验证码_05



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



12.自动提交

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

操作流程​:

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


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



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



13.CSRFProtect校验开启

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

校验过程​:

如果是非表单提交(ajax)

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

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

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

如果是表单提交

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


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

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



经典案例之某新闻网站的实现(二)_短信验证码_08



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​





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