![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python
文章平均质量分 78
给你骨质唱疏松
个人笔记分享
展开
-
xlrd模块的使用
xlrd模块的使用 :# pip install xlrdimport xlrdclass ExcelUtill(): def init (self,excelpath,sheetName="Sheet1"): self.data = xlrd.open_workbook(excelpath) self.table = self.data.sheet_by_name(sheetName) #获取第一行作为key值 self.keys = s原创 2021-06-28 23:42:08 · 541 阅读 · 0 评论 -
drf 请求与响应
一.请求 RequestREST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了HttpRequest类的Request类的对象0.对象路径from rest_framework.request import Request1.常用属性request.data : 存放的是原来 request.body 中的所有数据, (前端传过来的三种格式的数据)# data 特征- 包含了解析之后的文原创 2021-04-21 10:17:53 · 2639 阅读 · 1 评论 -
drf 序列化组件
一.序列化器介绍 (Serializer)1.Python中的序列化与反序列化序列化 : 将Python中的对象转成就送格式的字符串反序列化 : 将python格式的字符串转成Python中的对象2.序列化器的作用序列化, 序列化器会把模型对象转换成字典, 经过 response 以后变成json字符串反序列化, 把客户端发送过来的数据,经过 request 以后变成字典, 序列化器可以把字典转成模型反序列化, 完成数据校验功能3.注意drf 中的序列化组件是先把对象转成字典原创 2021-04-21 10:17:03 · 383 阅读 · 0 评论 -
APIView源码及Request对象分析
一.CBV源码分析1.分析流程CBV的源码分析在上一篇文章中做过详细介绍 ????点击传送:https://www.cnblogs.com/songhaixing/p/14583239.html2.总结分析步骤path的第二个参数是:View类的as_view内部有个view闭包函数内存地址一旦有请求来了,匹配test路径成功执行第二个参数view函数内存地址(requset)本质执行了self.dispatch(request)通过反射去获得方法 (假设是get方法) 的内存地址赋值给h原创 2021-04-21 10:16:10 · 341 阅读 · 0 评论 -
DRF框架入门介绍
引入1.什么是 RESTfulREST与技术无关,它是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态所有的数据,不管是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性对于REST这种面向资源原创 2021-04-21 10:14:45 · 4906 阅读 · 1 评论 -
Django之Auth模块
引入我们在开发一个网页的时候, 无可避免的需要设计实现网站的用户系统; 此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能, 为了节省这个麻烦的过程, Django自带了强大的用户认证系统Auth, 它默认使用auth_user表来存储用户的数据ps : auth 本质上也是一个app一.Auth 模块的使用于字段1.先导入 auth 模块form django.contrib import auth 2.进行数据迁移命令来生成 auth_user 表python3原创 2021-04-21 10:13:48 · 393 阅读 · 0 评论 -
django之Cookie、Session、Token
一.Cookie、Session、Token的由来我们知道HTTP协议无连接的, 也就是不保存用户的状态信息早期(十几年前)的网页是静态的, 数据都是写死的, 人们访问网页只是用来查看新闻的, 没有保存用户状态的需求而往后出现了像论坛、博客、网购这一类需要保存用户信息的网站, 如果网站不保存用户的状态信息, 意味着用户每次访问都需要重新输入用户名和密码, 这无疑对用户的体验是极其不好的于是, 就出现了会话跟踪技术, 我们可以把它理解为客户端与服务端之间的一次会晤, 一次会晤包含的多次请求与响应, 每原创 2021-04-21 10:13:13 · 459 阅读 · 1 评论 -
CBV加装饰器与正反向代理简介
一.CBV加装饰器可以给类添加装饰器可以在方法上添加装饰器from django.views import Viewfrom django.utils.decorators import method_decorator# 第一种写法:直接加在类上# 第一个参数是装饰器引用,第二个参数是被装饰对象的方法# @method_decorator(auth,name='get')class MyViews(View): # 第二种写法:指名道姓的加在方法上(不需要指定方法名n原创 2021-04-21 10:12:39 · 135 阅读 · 0 评论 -
中间件与CSRF跨站请求伪造
引入1.什么是中间件中间件是一个很大的概念, 它介于两个事务之间服务器中间件:服务器的调优,例:Java的Tomcat消息队列中间件:消息队列,在应用程序与应用程序之间,数据库中间件:应用程序与数据库之间一.Django中间件 (middleware)1.什么Django中间件请求来的时候需要先经过中间件才能到真正的Django后端响应走的时候也需要经过中间件才能发送出去通俗的讲 : 中间件相当于是Django的门户, 你进来时要经过它, 出去的时候也要经过它介于request与原创 2021-04-21 10:11:32 · 289 阅读 · 0 评论 -
forms组件源码分析
引入分析forms 组件如何进行校验为何将校验成功的数据放入 cleaned_data 中检验失败的数据放入 errors 中代码示例 :# 进行校验 is_valid()if form_data.is_valid(): print('校验成功') # 获得校验成功的数据 cleaned_data print(form_data.cleaned_data)else: print('检验失败') # 获得检验失败的错误提示 errors原创 2021-04-21 10:10:46 · 134 阅读 · 1 评论 -
Django之forms组件
一.Django的forms组件应用场景1.应用一般应用于前端的登入、注册界面, 对用户输入的字段进行校验, 快速的判断用户输入的内容是否合法, 并返回信息2.为何不在前端直接使用JS进行校验前端的校验可以没有, 但后端的校验必须要有因为前端的校验弱不禁风, 有很多种方式可以伪装成浏览器发送请求传递数据或者通过爬虫程序绕过前端页面直接朝后端提交数据二.forms组件的基本使用(步骤)导入forms组件定义一个类, 并继承Form在类中书写要校验的字段, 字段的属性就是要校验的规原创 2021-04-21 10:10:00 · 1318 阅读 · 0 评论 -
Django分页器
一.分页器简介当数据量非常大时, 我们不可能把所有的数据都放在同一页中, 于是就有了分页的概念, 将数据像书一样每一页规定可容纳多少条数据, 运用到Django中的分页组件, 它其实是Django内置的一个类二.Paginator对象与Page类对象1.如何得到这两个类对象导入分页类from django.core.paginator import PaginatorPaginator类对象# 语法伪代码paginator = Paginator([要分页的数据],[每页显示条数]原创 2021-03-26 21:31:19 · 1972 阅读 · 0 评论 -
Django与Ajax
一.Ajax简介1.什么是AjaxAJAX(Asynchronous Javascript And XML)翻译成中文就是 “异步Javascript和XML”即使用Javascript语言与服务器进行异步交互,传输的数据为XML当然,传输的数据不只是XML,现在更多使用json数据通俗的讲 : 它是一种创建交互式网页应用的网页开发技术2.Ajax特点异步提交浏览器页面局部刷新 : 这一特点给用户的感受是在不知不觉中完成请求和响应过程3.异步与同步提交同步交互:客户端发出一个请原创 2021-03-26 21:30:26 · 1047 阅读 · 0 评论 -
Django框架之模型层之聚合查询(aggregate)、分组查询(annotate)、F查询、Q查询、Meta元信息、原生SQL、综合练习、Django admin 的使用、补充知识点
十六.聚合查询 aggregate( *args,**kwargs)1.五种聚合函数Avg (Average) : 平均值Max (Maximum) : 最大值Min (Minimum) : 最小值Sum (Summary) : 求和Count : 个数2.aggregate( )aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典键的名称是聚合值的标识符,值是计算出来的聚合值键的名称是按照字段和聚合函数的名称自动生成出来的如果你想要原创 2021-03-26 21:28:03 · 1990 阅读 · 0 评论 -
Django框架之模型层之手动创建第三张表、QuerySet对象API、单表操作API、多对多操作API、基于对象(子查询)/基于双下划线查询(连表查询)(正向查询,反向查询)
七.手动创建第三张表1.自动创建(常用)优点 : 第三张表以及对应的外键关联字段不需要书写缺点 : 可扩展性差, 无法对ORM自动生成的中间表进行增加字段的操作注意 : 可以使用ORM提供给多对多关系表操作API以及正方向和双下划线查询第三张表中没有其他字段class Author(models.Model): name = models.CharField(max_length=32,verbose_name='作者名')# 通过ORM自带的ManyToManyField自动创原创 2021-03-26 21:24:43 · 296 阅读 · 0 评论 -
Django框架之模型层之字段及参数介绍
一.django 测试环境搭建当你只是测试项目中某一个 py 文件内容, 不想去启动整个项目的时候,这时候就可以搭建一个测试环境1.方式一任意创建一个 py 文件, 在该文件内书写固定的配置(可以去manage.py文件中去复制)import osif __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day06.settings") import django # 加入这两行原创 2021-03-26 21:18:19 · 978 阅读 · 0 评论 -
Django框架之模板层(inclusion_tag、模板的导入与继承、过滤器、模板标签、模板语法详解)
一.两种模板方法变量相关 : {{ }}逻辑相关 : {% %}二.注释注释是代码之母 : {# #}三.模板语法之传值1.Python中基本数据类型传值def test_func(request): s = "Hello 派大星!" i = 1314520 f = 1.75 l = [1,2,3,4,5] d = {"name":"shawn","age":23} t = (2,3,4,5,5) se = {3,4,5,原创 2021-03-19 17:26:12 · 302 阅读 · 0 评论 -
Django框架之视图层(CBV源码剖析、FBV、JsonResponse对象、form表单上传文件)
引入视图层是实现业务逻辑的关键层一.三剑客本质HttpResponse、render、redirect视图函数必须要返回一个 HttpResponse 对象, 如果未返回, 会出现如下错误 :提示你没有返回一个 HttpResponse 对象, 而是返回了一个 None为什么必须返回这个对象呢? 我们 Ctrl + 鼠标点击分别查看三者的源码可得到解释# HttpResponse# renderdef render(request, template_name, c原创 2021-03-18 17:48:31 · 203 阅读 · 0 评论 -
数据增删改查页面搭建
数据增删改查页面需求实现在页面中以表格形式显示数据库所有数据每条数据后边带一个编辑和一个删除选项点击删除, 则删除该条记录, 对应的数据库记录也被删除, 紧接着重新显示更新后的数据表格点击编辑, 则跳转到编辑页面, 对数据进行更新提交后跳转重新显示更新后的数据表格表格的下方设置一个增加按钮点击增加, 跳转到增加页面, 输入增加内容并提交, 紧接着重新显示更新后的数据表格普通版本实现代码urls.py 文件from django.contrib import adminfrom d原创 2021-03-17 19:22:09 · 1287 阅读 · 1 评论 -
Django框架之路由层
一.路由层之路由匹配1.什么是路由路由可以看成是跟在 ip 和 port 之后的地址2.url( ) 方法# 示例urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/', views.login_func), url(r'^register/$', views.register_func),]url( ) 方法的第一个参数其实是正则表达式, 一旦第一个参数匹配到了内容直接结束匹配, 并调原创 2021-03-17 19:21:22 · 323 阅读 · 1 评论 -
pycharm 更换 pip 下载源
Pycharm更换下载源更换原因在使用Pycharm的时候不免要下载许多的第三方库, 特别是移植过来的项目更是一个文件的依赖包需要下载而Pycharm默认的官方源下载比较慢, 我们可以通过配置来更换国内下载源靠谱的 pip 镜像源源清华源 : https://pypi.tuna.tsinghua.edu.cn/simple豆瓣源 : http://pypi.douban.com/simple/阿里源 : http://mirrors.aliyun.com/pypi/simple/原创 2021-03-17 15:48:03 · 7080 阅读 · 1 评论 -
老司机都知道的Python项目打包exe程序方法
pyinstaller 如何打包一个项目在前面一篇介绍 pyinstaller 工具的时候我们仅仅只是介绍了将单个文件制作成 exe 程序 : ????用Python工具Pyinstaller制作exe应用程序 , 接下来我们将介绍如何将一个项目制作成 exe 程序, pyinstaller 还没有安装建议查看上面的连接-D 参数以我的项目作为示例展开介绍参数参数全称参数说明-D–onedir打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码,该方式代码原创 2021-03-03 00:21:08 · 444 阅读 · 0 评论 -
匿名函数在列表生成式中的应用产生的闭包函数延迟绑定问题
匿名函数在列表生成式 (推导式) 中的应用产生的闭包函数延迟绑定问题先看下面这个函数:def num(): return [lambda x: x * i for i in range(4)]print([func(2) for func in num()])再不运行结果的情况下心算下它的结果…是不是算到 [0,2,4,6] ?于是在pycharm里面运行了一下 : [6,6,6,6], 百思不得其解, 我们先来把匿名函数变成普通函数, 这样好理解一点 :def num():原创 2021-02-26 14:16:56 · 214 阅读 · 0 评论 -
Python基础到进阶
Python基础到进阶????????原创 2021-02-26 12:02:32 · 4763 阅读 · 0 评论 -
Mysql之存储过程(无参、有参(in、out、inout)))
一.存储过程1.什么是存储过程存储过程中包含了一系列的 SQL 语句, 就类似于 Python 中定义的函数, 通过调用存储过程名(函数名)来执行其内部的一堆 sql 语句(Python代码)2.使用存储过程的优缺点优点 :用于替代程序写的 SQL 语句, 实现程序与 SQL 语句的解耦基于网络的传输, 只传"存储过程名"比传一堆的 SQL 语句的数据量小的多缺点 :程序的可扩展性非常低3.应用程序与数据库结合使用的三种开发模式第一种"应用程序" : 程序员自己原创 2021-02-21 18:32:16 · 2239 阅读 · 0 评论 -
pymysql模块的使用(mysql的增删改查,execute的注入问题,指针移动scroll,事务处理回滚rollback(),获取最后一条记录的自增id : lastrowid)
引入1.什么是 pymysql**pymysql **是 Python 中用来操作 mysql 的第三方模块(库)(就是一个mysql的客户端)pymysql 是 Python3 之后出来的模块, 而 Python2 中使用 mysqldb 操作数据库Django 中也可以使用 pymysql 连接 mysql 数据库2.pymysql 的安装终端命令行pip3 install pymysql # 或者使用下面的方式pip3 install -i http://pypi.douba原创 2021-02-08 14:57:32 · 769 阅读 · 0 评论 -
初识数据库管理软件
引入我们通常称 Mysql 、Oracle、SQLite之类的为数据库, 其实本质上它们是一个个数据库管理软件一.数据库管理软件的由来在学习Mysql之前, 我们的数据想要永久保存,一般都是保存在硬盘中, 硬盘的单位就是文件, 毫无疑问, 一个文件仅仅只能存在于一台机器上, 但是一个程序的所有组件不可能都在一台机器上, 如果都在一台机器上, 那么就会产生许多问题, 下面将介绍会产生的问题以及数据库管理软件的解决方案1.程序所有组件都运行在一台机器上的问题问题 : 运行程序机器的宕机代表着整个软件原创 2021-01-29 00:06:59 · 281 阅读 · 1 评论 -
Python并发编程之协程
引入我们知道一个线程同一时间内只能被操作系统分配一个CPU资源, 我们可以基于多进程实现并发, 也可以基于多线程实现并发, CPU正在运行一个任务, 有两种情况下会被切去执行其它任务, 一种是该任务发生了阻塞, 另一是该任务运行时间过长或者被其他优先级更高的任务夺走CPU, 对于单线程来说, 如果一个单线程下运行了多个任务, 那么就不可避免的出现I/O操作, 一旦一个任务出现阻塞的情况, 那么整个线程将处于阻塞状态(因为一旦阻塞, CPU资源将会被夺走), 但是如果我们能在自己的应用程序中(即用户级别,原创 2021-01-28 21:45:54 · 226 阅读 · 1 评论 -
Python并发编程之多线程(线程池的概念以及线程池的使用,concurrent.future模块的使用,Pool)
十六.线程池概念1.什么是线程池与进程池类似, 线程池是在系统启动时就先创建大量空闲的线程, 程序提交一个任务给线程池, 线程池便会调用一个线程来执行该任务, 当任务运行完毕后, 该线程并不会关闭, 而是返回到线程池中再次变为空闲状态等待下一个提交的任务,2.为什么使用线程池虽说线程的启动相比较于进程开销非常小, 但毕竟也是需要向操作系统发起调用, 我们使用线程在一些情况下能更好的提升性能, 尤其是程序中有大量生命期短暂的线程时, 使用线程池最为合适了3.线程池的作用使用线程池可以精确控制操作系原创 2021-01-24 19:50:43 · 541 阅读 · 1 评论 -
Python并发编程之多线程(GIL全局解释器锁及多进程多线程应用场景性能对比)(超级无敌详细)
十五.GIL锁(重点)1.GIL的定义Global Interpreter Lock 直译为全局解释器锁In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiplenative threads from executing Python bytecodes at once. This lock is necessary mainlybecause CPython’s memory manage原创 2021-01-24 19:48:07 · 388 阅读 · 0 评论 -
Python并发编程之多线程(事件Event,定时器Timer,线程Queue(队列,堆栈,优先级队列))
十二.事件 (Event)(了解)线程之间状态同步, 两个不同的任务执行, 一个任务如果需要另一个任务执行之后才能开始执行, 那么这个待执行的任务是如何获取到上一个任务执行状态的呢? 如果是进程, 那就需要借助共享内存传递一个标志信号, 而线程本身就共享一个线程的内存空间, 所以, 为了解决以上问题, threading 模块为我们提供了一个 Event 对象1.Event 对象的方法Event 本质就是一个标志, True或者False, 而它提供的wait函数可以阻塞当前线程, 直到状态从Fals原创 2021-01-24 19:45:27 · 919 阅读 · 0 评论 -
Python并发编程之多线程(守护进程,互斥锁,信号量Semaohore,死锁与递归锁)
八. 守护线程1.进程守护进程与线程守护进程对于主进程来讲, 守护进程守护的是主进程的代码, 主进程代码运行完毕, 则守护进程就终止, 之后如果还有非守护子进程在运行, 那么主进程会一直等待其运行完毕后回收该子进程的资源, 不然就会产生僵尸进程对于主线程来讲, 守护线程守护的是主线程的整个生命周期, 主线程需要等待其他非守护线程运行完毕才算完毕, 完毕的同时守护线程也被回收, 主线程的结束也就意味着进程的结束, 之后进程整体的资源将被回收, 而进程必须保证非守护线程都运行完毕后才能结束2.守护线原创 2021-01-24 19:43:15 · 391 阅读 · 3 评论 -
Python并发编程之多线程(多线程实现socket,threading常用方法示例)
四.使用多线程并发 socket 通信(tcp)示例比较简单, 更多功能自行添加1.服务端from threading import Threadfrom socket import *s = socket(AF_INET,SOCK_STREAM)s.bind(("127.0.0.1",8090))s.listen(5)def connection(conn): while 1: try: date = conn.recv(1024)原创 2021-01-24 19:40:49 · 611 阅读 · 0 评论 -
Python并发编程之多线程(多线程介绍,开启多线程的方式,threading模块,对比对进程与多线程)
引入什么是线程、进程与线程的关系1.创建线程的开销远远小于创建进程创建线程的开销要远远小于创建一个进程, 因为创建进程需要操作系统申请一块内存空间, 然后将数据从硬盘读到该进程的内存空间中, 并且一个进程至少要有一个线程, 而创建一个线程只是在进程的内存空间里创建, 无需申请空间, 几乎是发起系统调用的同时一个线程就启动起来了2.进程之间、线程之间的关系进程之间是竞争关系 : 不同的应用程序开启的不同进程共同争夺计算机硬件资源(cpu、网卡(网速)等)线程之间是协作关系 : 同一个进程内的线程原创 2021-01-24 19:38:55 · 210 阅读 · 0 评论 -
Python并发编程之多进程(回调函数callback)
十七.回调函数 (callback)1.什么是回调函数将第一个函数的指针(也就是内存地址,Python中淡化了指针的概念)作为参数传给另一个函数处理, 这第一个函数就称为回调函数2.简单示例def foo(n): print(f"foo输出{n}")def Bar(i,func): func(i)for i in range(3): Bar(i,foo) '''输出foo输出0foo输出1foo输出2'''3.回调函数应用场景当进程池中一个任务原创 2021-01-23 23:50:24 · 4035 阅读 · 0 评论 -
Python并发编程之多进程(进程池的使用)
十五.进程池概念1.什么是进程池?????进程池是资源进程, 管理进程组成的技术的应用.2.为什么要有进程池?????忙时会有成千上万的任务需要被执行,闲时可能只有零星任务。????那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?????首先,创建进程需要消耗时间,销毁进程也需要消耗时间。????第二即便开启了成千上万的进程,操作系统也不能让他们同时执行,这样反而会影响程序的效率。????因此我们不能无限制的根据任务去开启或者结束进程。那么我们要怎么做呢?3.原创 2021-01-23 23:49:06 · 424 阅读 · 0 评论 -
Python并发编程之多进程(信号量,死锁与递归锁,事件 (Event))
十三.信号量 Semaphore (了解)互斥锁同时只允许一个线程修改数据, 而 Semaphore 允许同时有一定数量的进程更改数据, 就像理发店, 比如只有3个托尼老师, 那最多只允许3个人同时理发, 后面的人只能等到有人理完了才能开始, 如果指定信号量为3, 那么来一个人获得一把锁, 计数加1, 当计数等于3时, 后面的人均需要等待 , 一旦释放, 就有人可以获得一把锁from multiprocessing import Semaphore,Processimport time,random原创 2021-01-23 23:47:48 · 287 阅读 · 0 评论 -
Python并发编程之多进程(生产者消费者模型)
十二.生产者消费者模型1.什么是生产者消费者模型生产者 : 程序中负责产生数据的一方消费者 : 程序中负责处理数据的一方2.为什么引入生产者消费者模型在并发编程中, 生产者消费者模式通过一个容器来解决生产者和消费者之间的强耦合性, 两者之间不再是直接通信, 而是通过堵塞队列来进行通信, 生产者(生产速度快)不必再等待消费者是否处理完数据, 消费者直接从队列中取, 该队列就相当于一个缓冲区, 平衡了生产者和消费者的工作能力, 从而提高了程序整体的数据处理速度3.如何实现通过队列 : 生产者-原创 2021-01-23 23:46:34 · 1125 阅读 · 2 评论 -
Python并发编程之多进程(互斥锁,IPC,)
十.进程同步锁(互斥锁/排它锁)上面我们实现了进程的并发, 进程之间的数据是不共享的, 但是他们可以共享同一个文件(硬盘空间), 或者是同一个打印空间, 然而在共享的同时也带来了问题 : 进程的运行不是同时进行的, 它们没有先后顺序, 一旦开启也不受我们的限制, 当多个进程使用同一份数据资源时, 就会引发数据安全或者数据混乱问题1.什么是互斥锁我们打个简单的比方, 公司里的一台打印机, 每个人都可以使用, 但同事只能有一个人在使用, 不然就会造成打印错乱; 又比如合租房的卫生间, 合住的同伴都可以使用原创 2021-01-23 23:45:29 · 350 阅读 · 0 评论 -
Python并发编程之多进程(孤儿,僵尸,守护进程)
七.孤儿进程1.什么是孤儿进程当一个父进程创建了多个子进程, 子进程再创建子子进程等等父进程因正常运行完毕或其他情况被干掉的时候, 它的子进程就变成了孤儿进程为了避免孤儿进程完成任务后没有父亲通知操作系统回收资源于是 PID 为 "1"的顶级进程 systemd 就接手了这个孤儿进程systemd 相当于一个孤儿院, 但凡是孤儿进程都会成为它的子进程2.孤儿进程演示先在一个虚拟终端里开启一个 Bash 进程,把他当做父进程紧接着开启一个 “sleep 1000 &” 进程,原创 2021-01-23 23:43:23 · 661 阅读 · 0 评论