手机验证码接口
一. 路由解析与视图函数
去user文件夹下的urls .py文件下去添加路由
这里有个方法,Alt + enter 键快速创建视图函数,就不用这么麻烦还要去api .py文件下手动创建视图函数了
确定手机验证码接口流程:
- 验证手机格式
- 生成验证码
- 保存验证码
- 发送验证码
为了降低代码的冗余,提高代码的复用性,可以将一些重复使用的功能,放到某个文件夹中,这样可以使代码更加精炼
可以在项目文件的根目录下创建一个包,命名为common,在这个包中,不与具体模块关联的独立的东西写到这里,比如创建一些功能文件,这些文件中的内容可供重复调用,这样,代码就更加精炼
二. 验证手机格式
1. 使用正则的方式去验证手机号格式是否正确
- 测试正则匹配
像一些简单的测试,可以用ipython的方式
- 编写函数
这里为什么要多一个strip()方法呢?因为前端传回来的数据可能首尾有空格,这个谁也不敢保证,代码需要严谨,考虑到一切可能发生的情况,如果是手机号中间有空格,那就是前端的锅了,说明前端处理数据不准确
开发是一件严谨的事,写完函数之后,一定要测试一下有没有错误,这样可以减少一些不必要的麻烦
使用ipython工具,就不用大动干戈,运行一大堆的代码
可以在pycharm的终端中使用ipython,也可以在Ubuntu的终端使用ipython
三. 生成验证码
1. 测试接口
如果手机号匹配正确,则发送验证码,否则返回错误码给前端
先简单返回一下状态码意思一下,如果手机号验证正确,应该生成验证码返回给前端,但生成状态码这个功能还比较麻烦,先测试一下能不能成功返回状态码
这里就使用postman工具比较方便了,
如果没有安装,可以参考该篇文章 https://blog.csdn.net/qq_44614026/article/details/96477851
首先运行apis .py文件
然后通过postman发送表单数据
2. 将错误码统一放入errors .py文件
为了使得代码更加精炼,将错误码统一放入一个文件中
这样还能避免状态码的冲突(两种错误返回了同一个状态码)
导入errors .py模块,将代码中的数字改为状态码对应的错误
为了避免出错,一样可以用Postman去测试
3. reder_json的封装 (着重注意)
-
前面第1篇中的文档中有提及,将接口定义成一种基本的格式,这样前端才能更明确的接收后端传过来的数据,所以应该抽象出一个函数,将格式定义成下面这样
文档中提供了相应的代码
根据这种方法,来修饰一下所写的代码
这个方法,属于比较底层的代码,和我们的业务是没有什么关联的,这个代码,放到另外的项目中,也是可以直接使用的,所以,这类代码,可以独立放在一个文件夹的模块中,只要导入这个模块,就能调用这个方法 -
创建一个libs文件夹,用于放置底层的模块,在该文件夹中建立一个http .py文件,填写代码去实现这个方法
默认返回的错误码为ok,如果正确返回的话data中是不需要返回数据的,data为None,只需要返回code就行;
如果data有值的话,再加上.这样可以减少接口数据的传输量(在公司的正式开发中,需要尽可能减少接口数据的传输量,举个例子,接口数据的传输量越少,http的传输量也会变小,用户访问的速度会加快,如果网站访问量很多,这样去减少接口数据量的传输,也可以减少服务器的开销)
最后,通过JsonResponse将数据返回给前端
然后修改一下api .py文件,这样返回的内容就减少了,减少了接口传输数据的开销
-
测试一下能不能返回josn数据
使用Postman工具测试
可以正确返回,但是有一个问题,数据0的前面有空格,这个空格是多余字符,没必要传输的字符,没有意义
所以,还需要优化一下代码 -
定义分隔符
json.dump中有这样一个参数 separators,可以定义符号前后的空格数,现在要将符号的空格数为0
优化代码
测试一下,可以看到空格就没了,所以接口数据的传输就减少了一个字节
4. 生成验证码
验证码是一个固定长度的随机数,不单单手机号这里可能要生成验证码,还有其他地方也可能用到验证码,所以可以把生成验证码这个模块独立出来,同样,将其放入utils .py文件中
生成手机验证码这里默认取4位数字,使用随机数生成,为了方便修改,采用取长度的方式生成103 ~ 104 的随机整数(前开后闭),可以转成字符串,看具体需求
但是,这样有个问题,代码一定要严谨,如果其他地方要生成验证码,传过来的不是length不是整型,或者这个数字为小于1的数,那么这个函数在其他地方被调用的时候,就会报错,所以对传入该函数的参数需要进行判断
如果传入的参数有误,就生成一位数的状态码,这样也不会报错,让程序停止