不接受反驳 本人很菜。写总结只是为了增加经验!
先说说个人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做了状态保持 登录模块等我有时间了在写
原文地址:https://www.cnblogs.com/famousday/p/9348807.html