不接受反驳 本人很菜。写总结只是为了增加经验! 

先说说个人flask和django框架的使用感受

用flask第三方扩展自己找包

django则不同了。django真的太大了。。 

你如果真的用django去开发一个中小型项目那你感觉真的是杀鸡用牛刀

不过我个人认为用flask写起来舒服很多 因为django你要考虑的因素太多太多了。比如python2只认识mysqldb 但python3 却使用 pymysql 你还需要给数据库改名 等等

有人说flask只适合开发中小型项目。。。 个人感觉不是。 我之前从网上搜过很多flask和django框架的区别。差异和喜欢程度,

为啥公司喜欢用django的多一点,因为django开发效率高啊。你flask疯狂找扩展时候。django估计都开始写了吧 再说效益都是钱啊!!!

再说django自带的站点也不错。 因为有人给他的站点做了二次开发啊

而flask则是。。大牛都喜欢用。我听他们说 flask开发真的很爽,(我还在疯狂的找扩展包)虽然不如django齐全但是flask开发程度大小是需求说了算的

可以很大也可以很小而且省去了很多砍框架的事情,用什么我装什么扩展包就是了。扩展包也一直在更新,很舒服

django则不同,目录不需要自己搭建 直接一个 django-admin startproject    子应用 python manage.py startapp 完事

 

说说18年新火的 django rest framework吧

这东西太强大了。 他不是框架 他是基于django实现的一个扩展包

封装程度极高 

说实话第一次用这都写完注册页面了,我还是有点记不清 那几个APIViews 和VIEset

只知道写的时候看看 那个最合适那个最方便!!就继承那个class

这DRF重点就是理解 序列化和反序列化 我个人感觉理解了就算是入门了。

序列化 == 模型类> python字典>json

反序列化 == 前端发送数据 >经过serializer > python字典> 模型类 

通俗说吧。 序列化 就是你写好的模型类 然后转成 字典然后json

反序列化就是接收前段数据经过校验 然后转成python的字典 你取的时候跟字典一样

 

而且返回也不是httpresponse了 是drf自带的response

Serializer(instance=None, data=empty, **kwarg)

说说模块部分吧
分为两个部分一个分为校验一个是用户模块
这不正符合 mvt 设计模式嘛!
使用数据库mysql nosql使用redis
第一个API写的是返回图片验证码 使用的是最原生的APIView
APIView和View不同之处
APIView继承 django 原生view
传入视图的request 不是django原生的HTTPrequest
而且任何APIExcotion都会被捕捉
如果你说mysql和redis异常怎么办, 自己写!!
而且dispatch()之前 会自动校验身份 流量控制
视图返回方法是 response 视图会为响应数据设置render符合前端要求协议
前端发来请求并在路径上生成uuid
调用第三方库 生成验证码
将image加上uuid 拼接为键 图片验证码为值存入redis数据库
返回图片用的django原生的Httpresponse 记得设置类型  conttype=image/jpg
#第二步写发送短信验证码
使用GenericAPIView
Genercapiview 继承apiview
主要提供了序列化器和数据库查询方法
最大特点是!!这哥们 可以配合五个类一起使用!!那五个类自己看文档吧。。
第一步指定序列化器!
序列化器里面是啥等会说
第二步定义get属性接收手机号
指定序列化器
验证序列化器 如果有异常抛异常
生成图片验证码
调用celery发送短信(celery做成一个独立文件。独立启动分离出来就能用那种。这么做解耦高。有益于日后拓展 而且他报错!!一般报错在你指定的redis数据库内!!)
使用 redis管存储两个 一个以sms_+手机号为键 值为验证码 存储 一个以sms_flak手机号为键 值你随便 判断是否是60秒内频繁发送短信
而且使用管道切记一定得提交!!!

说说验证器都发生了什么吧
首先校验 uuid 是否是uuid 类型
然后校验前端传来的短信码是否是你存储的位数
定义校验的字段:字段的名字要么和模型类属性名相同,要么和传入的校验参数胡名字相同(千万别皮)
然后联合校验短信验证码需要用到uuid 所以uuid也传过来。 因为储存时候是用到了uuid
取出redis存储的真是验证码
哦对了。由于drf他不捕获数据库异常所以自定义异常除了mysql 连redis也写了
所以要踹一脚
取出之后第一件事就是把储存在redis数据库的真实短信验证码给删了!!
防止暴力撞库
需要注意的一点就是 py3里面redis取出来的需要encode一下
然后为了我们伟大的用户体验好一点
还是给转成小写在比较吧。
然后从 self.context['view'].kwargs['moble']取出手机号
去redis数据库查一下
如果有就给他一个发送短信频繁
因为如果你是第一次注册redis数据库里肯定没有sms_flask手机号
因为你第一次来发送短信肯定flask+sms是空的
发短信总体流程是!
首先接收请求~!然后 调到serializer里去校验各个参数
然后 执行视图函数 返回 发送短信ok~

注册视图
使用的是createAPIVIEW
啥都不用做
就指定序列化器就完事
为啥? 有时间的话打开createapiview一看源码就知道了。
重点就在序列化验证器里面
序列化验证器使用的是
serializer.ModelSerializer
他和serializer.serializer的区别是
他提供自动校验模型类参数
自动为Serializer生成validators,比如unique_together
但是!你需要指定而外字段
为啥?
你数据库字段里有 同意 和passwordtwo 短信验证码等等嘛
这里你需要注意的
那些字段你是用来输入的(write_only)
那些字段你是用来输出的(read_only)
你输入的password是write_only把
不能输出吧
你手机号 用户名是read_only把
而且你需要追加校验额外字段
我记得没错的话
他自己提供的校验用户名没有min_length
max_length是150字节
疯了吧!
校验密码长度(你自己咋定义规则怎么校验)
正则手机号等等
然后重写了 create方法
因为用jwt做了状态保持


登录函数等我有时间了在写
10-03 19:39