Django的DRF:前后端分离
前后端分离 Django是很大很全,可以做到前端后端全包,提供了很棒的模版技术,orm操作。但是后来发现这样并不好,前端应该只是来绘制页面,后端只负责数据的部分,二者互不干扰,并行开发。随着前端不断的发展,出现了很多优秀的前端框架。 mvc的缺点 开发者在代码中大量调用相同的DOM API,处理繁琐,操作冗余,使得代码难以维护。 大量的DOM操作使页面渲染性能降低,加载速度变慢,影响用户体验。 当Model频繁发生变化,开发者需要主动更新到View;当用户的操作导致View发生变化,开发者同样需要将变化的数据同步到Model中,这样的工作不仅繁琐,而且很难维护复杂多变的数据状态。 mvvm Model层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑; View代表UI组件,它负责将数据模型转化成UI 展现出来; ViewModel是一个同步View和Model的对象。 在MVVM架构下,View和Model之间并没有直接的联系,而是通过ViewModel进行交互,Model和ViewModel之间的交互是双向的。因此View数据的变化会同步到Model中,而M...
产品开发:学习笔记与要点整理
确认需求 思考需求的功能性,复杂性,可行性,周期性。。。 迭代的思想 快速定位产品的核心功能,去除细枝末节,用最短的时间开发第一代产品 如何定位核心的功能 产品的目标是什么?核心用户是谁?应用的场景? 功能的实现 任务拆解,拆分产品的最小功能 需要解决最短时间可完成的功能 用最快的可扩展性的代码实现基本的功能 对于需要可能频繁变更的功能增加扩展性吗,同样的功能复用性 遵循DRY(Don’t Repeat Yourself)原则 数据库设计 表名称,字段名称清晰易读 每张表独立职责,不存储无关的信息,相关信息放一张表 长文本和短文本存储分离 当前数据和历史数据分离 设置合适的索引 不使用关联查询 如果数据量大的时候,为了扩展,需要分库,这样无法join 删除数据,逻辑删除 技术方案文档编写 系统设计 流程设计 任务调度设计 。。。 代码质量保证 code review 单元测试 自动化测试
Django常用的命令和语句:常见的命令
常见的命令 python manage.py showmigrations,这个命令是显示出Django项目中的所有migrations文件及其状态 [x] 代表已经执行完毕的migrations文件, []表示未执行或执行失败的文件。 django-admin startproject mysite 创建Django项目 python manage.py runserver 启动服务 python manage.py startapp 创建应用 python manage.py createsuperuser 创建后台管理超级用户 python manage.py makemigrations 生出迁移文件 python manage.py migrate 执行迁移文件产生表 python manage.py shell python manage.py inspectdb > models.py python3 manage.py sqlmigrate <迁移文件前面的序号(0001)> 如何查看迁移文件对应的sql语句 pyt...
WebSocket:websocket的介绍
websocket的介绍 WebSocket是一种在单个TCP连接上进行全双工通讯的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 上面是维基百科的介绍.简单的讲,websocket 和http一样,都是一种网络传输协议 WebSocket 和 HTTP 的区别http 协议是用在应用层的协议,他是基于 tcp 协议的,http 协议建立链接也必须要有三次握手才能发送信息。 http 链接分为短链接,长链接,短链接是每次请求都要三次握手才能发送自己的信息。即每一个 request 对应一个 response。长链接是在一定的期限内保持链接。保持 TCP 连接不断开。客户端与服务器通信,必须要有客户端发起然后服务器返回结果。客户端是主动的,服务器是被动的。 ...
Python的pydantic库:基本的类型
官方文档以及定义https://pydantic-docs.helpmanual.io/ Data validation and settings management using python type annotations. 使用 python 类型注释进行数据验证和设置管理。 pydantic enforces type hints at runtime, and provides user friendly errors when data is invalid. Pydantic 在运行时强制类型提示,并在数据无效时提供用户友好的错误。 Define how data should be in pure, canonical python; validate it with pydantic. 定义纯粹的、规范的 python 中的数据应该是什么样的; 使用 pydantic 验证它。 基本的类型12345678910111213141516171819202122232425262728293031323334from pydantic import BaseMod...
Python3类型注释:学习笔记与要点整理
普通的注释 在声明变量类型时,变量后方紧跟一个冒号,冒号后面跟一个空格,再跟上变量的类型。 在声明方法返回值的时候,箭头左边是方法定义,箭头右边是返回值的类型,箭头左右两边都要留有空格 123name: str = "jack"def greeting(name: str) -> str: return 'Hello ' + name typing模块的使用List 列表,是 list 的泛型 Tuple 元组,是 tuple 的泛型 Dict 字典,是 dict 的泛型 Set 集合,是 set 的泛型 Sequence: Sequence,是 collections.abc.Sequence 的泛型,在某些情况下,我们可能并不需要严格区分一个变量或参数到底是列表 list 类型还是元组 tuple 类型,我们可以使用一个更为泛化的类型,叫做 Sequence 泛型(Generic): 由于无法以通用方式静态推断有关保存在容器中的对象的类型信息,因此抽象基类已扩展为支持订阅以表示容器元素的预期类型。 1234567 f...
Python的dataclass类装饰器
Python3.7 dataclass使用指南 本文将带你走进python3.7的新特性dataclass,通过本文你将学会dataclass的使用并避免踏入某些陷阱。 dataclass简介 dataclass的使用 定义一个dataclass 深入dataclass装饰器 数据类的基石——dataclasses.field 一些常用函数 dataclass继承 总结 dataclass简介dataclass的定义位于PEP-557,根据定义一个dataclass是指“一个带有默认值的可变的namedtuple”,广义的定义就是有一个类,它的属性均可公开访问,可以带有默认值并能被修改,而且类中含有与这些属性相关的类方法,那么这个类就可以称为dataclass,再通俗点讲,dataclass就是一个含有数据及操作数据方法的容器。 乍一看可能会觉得这个概念不就是普通的class么,然而还是有几处不同: 相比普通class,dataclass通常不包含私有属性,数据可以直接访问 dataclass的repr方法通常有固定格式,会打印出类型名以及属性名和它的值 datac...
Python的Mixin概念:什么是mixin
什么是mixinhttps://blog.hszofficial.site/TutorialForPython/%E8%AF%AD%E6%B3%95%E7%AF%87/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E6%83%AF%E7%94%A8%E6%B3%95/%E5%A4%9A%E9%87%8D%E7%BB%A7%E6%89%BF%E5%92%8CMixin.html 定义和使用 Mixin 类应该遵循几个原则: Mixin 实现的功能需要是通用的,并且是单一的,比如上例中两个 Mixin 类都适用于大部分子类,每个 Mixin 只实现一种功能,可按需继承。 Mixin 只用于拓展子类的功能,不能影响子类的主要功能,子类也不能依赖 Mixin。 Mixin 类自身不能进行实例化,仅用于被子类继承。 例子12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849class Person1: def __init__(s...
微信小程序逆向分析:第一步,从手机中提取出wxapkg文件
第一步,从手机中提取出wxapkg文件以安卓为例,进入以下目录:/data/data/com.tencent.mm/MicroMsg/(一长串字符串)/Appbrand/pkg 把这些包从手机里导出来,进行解析,用adb进行导出,如果不知道哪个文件可以批量导出如果很多wxapkg建议清理一下,重启目标小程序。可能出现好几个包) 可以找到wxapkg文件,把它提取到电脑上。 第二步,利用解包工具解包 下载解包工具https://github.com/wanliofficial/wxappUnpacker,https://github.com/Cherrison/CrackMinApp 1node wuWxapkg.js <wx_mini_progranm_file_path> 解包要先解主包 node wuWxapkg.js 分包.wxapkg -s=主包的目录 解决解包过程中的程序报错 可能是子包 。。。 解包成功的标识 根目录下生成:app.js app.json app...
Vimium操作命令:操作网页
v(visual mode), 需要着重讲一下12345678910 先用 / 定位,找到想要选择的字符 再按 v ,进入模式 然后使用 j:向下一行 k:向上一行 h:向左一个字符或标点(数字+h,可以移动多个字符) l:向右一个字符或标点(数字+l,可以移动多个字符) w:下一个标点符号后位置,包括看不见的换行符 e:下一个标点符号前位置 b:取消选中上一个字符,字符和标点算一个字符 常用的基础快捷键在这:温馨提示: Mac对应的⌘就是Windows中的ctrl 大小写需要区分 操作网页123456789101112131415j or <c-e> 向下滚动一点k or <c-y> 向上滚动一点d 向下滚动半页u 向上滚动半页h 向左滚动l 向右滚动r 刷新页面yy 复制当前页面URL到剪切板p 在当前标签页打开剪切板中的URL,如不是URL则默认引擎搜索P 在新标签页打开剪切板中的URL,如不是URL则默认引擎搜索i 输入模式,有些网页有内置的快捷键,进入该模式即可使用该网页内...