- 博客(85)
- 收藏
- 关注
原创 jwt认证
在以后,如果想用 AUTH的user表作为用户表,无论是否扩展该表-1 认证:固定的-2 签发:-1方法 使用simple-jwt提供的(只能改返回的东西,请求的改不了)-修改返回格式-修改荷载-2方法 这时如果有需求可以 自定义 login,实现多方式登录--》基于auth的user表签发# 后期,可能会自定义用户表,签发和认证-1 认证:自定义认证类-2 签发:自己写# 以后再公司中,一个项目,就一个用户表?有可能有多个用户表。
2024-08-18 18:42:23
858
原创 接口文档(jwt)
1 作用是 不使用session机制,来存储记录用户登录信息# 2 jwt=Json Web Token:Json web token (JWT):常被用于认证,它是一个前端登录认证的方案,jwt就是token的一种-session和cookie方案# 3 cookie,session,token发展史# 4 token认证机制1 签发阶段:登录接口,登录成功,就签发-token有 三部分,每部分用 . 分割 ,组装成一个字符串,每部分都用base64编码头部:公司信息,加密方式等。
2024-08-18 18:41:13
829
原创 全局异常处理
f'报错时间:{time.time()},用户:{request.user.username or "匿名用户"},访问地址:{request.get_full_path()},请求方式:{request.method},视图类:{str(view)}')return Response({'code': 304, 'msg': f'程序异常,异常信息:{str(exc)}'})return Response({'code': 303, 'msg': f'drf异常,异常信息:{msg}'})
2024-08-18 18:40:28
328
原创 drf-路由
# 装饰器# get请求 http://127.0.0.1:8000/api/v1/books/login/print("登录成功")return Response({"code": 200, 'msg': "登录成功"})# 使用get请求 http://127.0.0.1:8000/api/v1/publish/send_sms/print("发送短信成功")return Response({"code": 200, 'msg': "发送短信成功"})
2024-08-18 18:37:58
603
原创 drf-视图组件
1 发送短信接口-APIView+get方法-ViewSet+send_sms方法# 3 查询所有,查询单条-路由:-视图类queryset=# 4 查询所有,删除一条-写俩:ListAPIView DestroyAPIView-写一个:-路由:-视图类queryset=# 5 总结1 只要想路由变了:ViewsetMixin2 只要想序列化,反序列化,就用GenericAPIView3 即想路由变了又想序列化,反序列化 GenericViewSet。
2024-08-18 18:37:15
486
原创 请求和响应
REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了HttpRequest类的类的对象。REST framework 提供了解析器,在接收到请求后会自动根据Content-Type指明的请求数据类型(如JSON、表单等)将请求数据进行parse解析,解析为类字典[QueryDict]对象保存到对象中。无论前端发送的哪种格式的数据,我们都可以以统一的方式读取数据。
2024-08-18 18:36:34
448
原创 序列化组件
作用:序列化:序列化器会把模型对象转换成字典,经过Response以后变成json字符串反序列化:把客户端发送过来的数据,经过request以后变成字典,序列化器可以把字典转成模型反序列化校验:完成数据校验功能。
2024-08-18 18:34:40
566
原创 drf入门
为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本。通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介。
2024-08-18 18:33:43
475
原创 drf综合复习
3 视图类的方法中--》实例化得到对象--》serializer.is_valid-->serializer.save()- -/api/v1/user/locked/-->post请求--》请求体{user_id:3,lock:True}-/api/v1/user/3/locked/-->post请求--》请求体{lock:True}-3 视图类的方法中--》实例化得到对象--》serializer.data。-写个函数--》配置文件配置--》出了异常都会走自己的函数。
2024-08-05 22:10:24
307
原创 JavaScript之数据类型
变量(variables),是计算机内存中存储数据的标识符,可以根据变量名称获取存储的值变量相当于一个容器,内部可以存储任意的数据,使用变量时,用的是内部存储的数据使用变量可以方便的获取或者修改。
2024-07-16 22:40:11
454
原创 JavaScript之流程控制
if (条件){条件成立执行的代码块}else{条件不成立时执行的代码块}if (条件){条件成立执行的代码块}else if(条件){条件成立执行的代码块}else{条件不成立时执行的代码块}// () 条件 {} 执行的代码块。
2024-07-16 22:38:16
527
原创 JavaScript基础
前端由于非常受制于后端,所以有一些人异想天开想要通过js来编写后端代码一统江湖由此开发了一个叫nodejs的工具(支持js跑在后端服务器上)但是并不能完美的实现,有很多bugECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现(另外的 ECMAScript 方言还有 JScript 和 ActionScript)。日常场合,这两个词是可以互换的。
2024-07-16 22:37:26
790
原创 CSS盒子模型和浮动
margin: 1px 2px 3px 4px 上 右 下 左margin: 1px 2px 3px 上 左右 下margin: 1px 1px 上下 左右margin: 1px 统一设置一个值标签的水平居中 可以使用固定搭配相对定位(Relative Positioning)是一种CSS定位方式,它是相对于元素在正常文档流中的位置进行定位(相对于标签原来的位置做定位)。通过设置position: relative;
2024-07-16 20:55:17
506
原创 CSS属性
属性版本继承性描述fontCSS1/2有简写属性。定义元素的文本特性font-styleCSS1有指定元素的文本是否为斜体CSS1有定义元素的文本是否为小型的大写字母CSS1有定义元素文本字体的粗细font-sizeCSS1有定义元素的字体大小CSS1有定义元素文本的字体名称序列CSS3有定义元素的文字是否横向拉伸变形CSS3有定义小写字母x的高度与对象文字字号的比率。属性版本继承性描述CSS1/3有定义元素的文本如何转换大小写。
2024-07-16 20:54:21
939
原创 HTML进阶
table>标签定义了HTML表格一个HTML表格由一个<table>元素和一个或多个<tr>、<th>和<td>元素组成<tr>:定义表格行<th>:定义表格标题<td>:定义表格单元格统一资源定位符(Uniform Resource Locator,简称URL)是一种用于描述Internet上信息资源的标识方法,类似于现实世界的地址。它提供了一种方式来访问万维网上的文档和其他资源。<input>标签是 HTML 中用于创建表单输入控件的标签之一。
2024-06-08 16:44:54
816
原创 HTML基础
HTML就是书写页面的一套标准<meta>标签是一种HTML标签,用于在网页中提供元数据(metadata)。<meta>标签是一种HTML标签,用于在网页中提供元数据(metadata)。元数据是描述数据的数据,它们提供关于网页内容、字符集、作者、关键字等信息,帮助搜索引擎和浏览器理解和处理网页。(2)常见的<meta>标签<meta charset="字符集">:指定网页文档使用的字符集,常见的字符集有UTF-8、ISO-8859-1等。
2024-06-08 16:43:08
1806
原创 HTTP协议
规定了服务端与浏览器之间的数据交互格式及其他事项如果服务端遵循HTTP协议 就可以被浏览器正常访问并展示内容如果服务端不遵循HTTP协议 浏览器就不会正常访问和展示 但是不影响服务端HTTP协议(HyperText Transfer Protocol,超文本传输协议)由蒂姆·伯纳斯-李于1989年为了推广互联网技术而推出的一种无状态网络应用协议HTTP协议构建于TCP/IP协议族之上属于应用层协议。主要用于传输与超文本相关的资源文件如HTML网页,css,js,图片,视频,音频等。
2024-06-08 16:40:18
972
原创 web服务器的本质
这个过程中可能包括本地Hosts文件的解析、本地DNS缓存的查询以及顶级域名服务器(Root DNS Server),依次通过多级的DNS服务器逐步解析出目标域名的IP地址。状态码表示服务器对请求的处理结果,响应头包含了一些元信息,而响应体包含了请求的实际内容。浏览器会先检查是否有缓存过该域名的IP地址,如果有缓存则直接使用,否则浏览器会向本机的DNS缓存查找域名对应的IP地址。目标服务器接收到浏览器发送的HTTP请求后,会根据请求的内容进行相应的处理。会发送一个HTTP请求给目标服务器。
2024-06-08 16:34:55
351
原创 操作MySQL数据库
创建一个存储数据表的文件夹。注意:mysql中的编码字符集中utf-8,要换成utf8mb4。SQL语句中的中括号部分表示可选。create database [if not exists] 数据库名 [character set 编码字符集];
2024-05-27 22:06:20
716
原创 SQL语句基础
用于创建或删除数据库以及数据表的语句,DDL包含了下列几种指令:CERATE:创建数据库和表等对象DROP:删除数据库和表等对象ALTER:修改数据库和表等对象的结构。
2024-05-27 22:05:42
182
原创 数据库初识
MySQLOracledb2accesssql server这些数据库都采用关系模型来组织数据,并且支持SQL查询语言。任何基于网络通信的应用程序底层用的都是scoket服务端基于socket通信收发消息客户端基于socket通信收发消息。
2024-05-27 22:05:11
661
原创 MySQL安装
MySQL是一个开源免费的关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一具有成本低、速度快、体积小且开放源代码等优点。
2024-05-27 22:04:35
783
原创 协程的操作
首先我们来看一下协程函数什么是协程函数呢?直白的讲,定义为如下形式的函数我们可以称之为协程函数,如下代码所示:# 使用 async 声明的函数就是协程函数pass所谓的协程对象就是调用协程函数之后返回的对象,称之为协程对象注意:调用协程函数时,函数内部的代码不会执行,只会返回一个协程对象# 使用 async 声明的函数就是协程函数pass# 调用携程函数得到的对象就是协程对象res = fn()实现了aiter() 和anext()方法的对象。anext。
2024-05-27 22:03:44
957
原创 协程的理论
就是单线程下的并发,又称微线程,纤程协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的需要强调的是:python的线程属于内核级别的,即由操作系统控制调度(如单线程遇到io或执行时间过长就会被迫交出cpu执行权限,切换其他线程运行)单线程内开启协程,一旦遇到io,就会从应用程序级别(而非操作系统)控制切换,以此来提升效率(!!!非io操作的切换与效率无关)对比操作系统控制线程的切换,用户在单线程内控制协程的切换1.必须在只有一个单线程里实现并发2.修改共享数据不需加锁。
2024-05-27 22:03:11
771
原创 进程池和线程池
导入模块# 构建线程池或进程池# 构造异步任务print(f'这是异步传进来的参数 n :>>>> {n}')# 提交任务print(f'这是异步 {i} 调用的返回结果 :>>>> {result}')# 提交线程任务结果# 关闭进程池,等待进程池中所有的任务完成# 逐个获取到异步迭代的结果print(f'这是异步调用的返回结果 :>>>> {task_every.result()}')
2024-05-27 22:02:34
467
原创 死锁和递归锁
递归锁(也叫可重入锁)是一种特殊的锁,它允许一个线程多次请求同一个锁,称为“递归地”请求锁在该线程释放锁之前,会对锁计数器进行累加操作,线程每成功获得一次锁时,都要进行相应的解锁操作,直到锁计数器清零才能完全释放该锁。递归锁能够保证同一线程在持有锁时能够再次获取该锁,而不被自己所持有的锁所阻塞,从而避免死锁的发生。但是注意要正常使用递归锁,避免过多地获取锁导致性能下降。
2024-05-27 22:01:31
491
原创 GIL全局解释器锁介绍
计算密集型任务使用多进程可以充分利用多核CPU的优势,而IO密集型任务使用多线程能够更好地处理IO操作,避免频繁的进程切换开销。根据任务的特性选择合适的并发方式可以有效提高任务的执行效率。1.GIL 不是python的特点而是Cpython解释器的特点2.GIL 保证解释器级别的数据的安全3.GIL会导致同一个进程下的多个线程的无法同时进行即无法利用多核优势4.针对不同的数据还是需要加不同的锁处理5.解释型语言的通病:同一个进程下的多个线程无法利用多核优势。
2024-05-27 22:00:49
547
原创 多线程理论及操作
减少了资源的消耗同一个进程下的多个线程资源共享多线程指的是在一个进程中开启多个线程简单的讲:如果多个任务共用一块地址空间,那么必须在一个进程内开启多个线程。多线程共享一个进程的地址空间线程比进程更轻量级,线程比进程更容易创建可撤销,在许多操作系统中,创建一个线程比创建一个进程要快10-100倍,在有大量线程需要动态和快速修改时,这一特性很有用若多个线程都是cpu密集型的,那么并不能获得性能上的增强。
2024-05-27 22:00:17
974
原创 进程间通信(IPC)之队列
管道是一种半双工的通信机制,即只能在一个方向上进行数据传输。子进程可以通过继承父进程的管道来实现通信。stdin、stdout和stderr是Python中的三个内置文件对象,它们分别代表标准输入、标准输出和标准错误。这些对象也可以作为管道使用。当我们在一个进程中使用read方法读取管道内的消息后,其他进程将无法再获取该管道内的任何其他消息。因此,我们需要使用锁或其他同步机制来确保多个进程能够正确地访问和修改共享资源。队列是一种线程安全的数据结构,它支持在多线程环境中高效地实现生产者-消费者模型。
2024-05-27 21:58:31
899
原创 僵尸进程、孤儿进程、守护进程
僵尸进程是指完成自己的任务之后,没有被父进程回收资源例如:开了一个pycharm ---> 将 pycharm 关闭 --> 任务管理器所有的关于 pycharm 的进程应该都被关闭,但是有时候会发现,有某几个 pycharm 进程任然在后台运行 --> 本来这部分资源应该被回收,结果因为还在运行,占用系统资源孤儿进程是指父进程在子进程终止之前就退出了例如:在没有关闭共享屏幕的前提下,直接退出腾旭会议,这时共享屏幕也会退出,不会还挂在后台在主程序死亡以后,因为子进程就没有办法再和主进程通信。
2024-05-20 21:56:55
581
原创 多进程操作
group参数未使用,值始终为Nonetarget表示调用对象,即子进程要执行的任务args表示调用对象的位置参数元组,args=(1,2,'ly',)kwargs表示调用对象的字典,kwargs={'name':'ly','age':18}name为子进程的名称。
2024-05-18 15:50:16
318
原创 操作系统理论
操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序位于系统硬件和应用程序之间的中间介质隐藏丑陋复杂的硬件接口,提供良好的抽象接口管理、调度进程,并且将多个进程对硬件的竞争变得有序。
2024-05-18 15:48:55
249
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人