自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 用rest-framework实现用户注册登录功能

类试图用到ListCreateAPIView(继承)指定序列化类和模型serilizer_class = UserSerilizerqueryset = UserModel.objects.all()重写create()函数def create(self,request,*args,**kwargs): serilizer = self.get_serilizer(data=request.data) serilizer.is_valid(raise_exception=True)

2020-10-17 16:17:02 827

原创 PUT与PATCH的差别

PUT必须提供所有字段PATCH(差量更新)可以只提供要修改部分的字段

2020-10-14 11:14:54 329

原创 rest-framework中的viewsets模块

viewsetsViewSetMixin重写as_view()GenericViewSet继承自GenericAPIView继承自ViewSetMixinViewSet继承自APIView继承自ViewSetMixin默认啥都不支持,需要自己手动实现ReadOnlyModelViewSet只读的模型的视图集合继承自RetrieveModelMixin继承自ListModelMixin继承自GenericViewSetModelViewSet直接封装

2020-10-14 11:12:03 336

原创 rest-framework中的类视图,mixin多继承

APIView子类generics模块中GenericsAPIView增加模型的获取操作get_queryset()get_object()lookup_field = ‘pk’get_serializer()get_serializer_class()get_serializer_context()filter_queryset()paginator()paginator_queryset()get_queryset_response()CreateAPIView

2020-10-05 15:07:56 153

原创 Django中的类视图

View内部定义了一个viewdispatch根据请求方法的名字进行分发TemplateView通过多继承实现指定template_nameListView渲染在模板上指定template_name数据使用model或者querysetDetailView渲染在模板上指定template_name数据使用model或queryset单一实例指定pk以后大部分情况是前后分离的,所以TemplateView,ListView,DetailView作了解Djang

2020-09-29 23:10:57 308

原创 Django-Rest-Framework中的APIView

简介继承自View属性renderer_classes渲染的类parser_classes解析转换的类authentication_classes认证的类throttle_classes节流的类控制请求频率permission_classes权限的类content_negotiation_class内容过滤的类metadata_class原信息的类versioning_class版本的类函数as_view()

2020-09-29 10:36:47 128

原创 django中的View类源码解析,CBV(用来构建基于类的视图)

创建一个视图,继承View注册urlView.as_view()在这里源码先判断是否在调用as_view()方法中传入带有初始化规定好的:get,post,put…等关键字参数,意思是这些字段是不被允许作为参数传入的。另外,如果传入类中没有规定的属性的关键字参数,那么也会报错。这些似乎不重要,只是检查在注册url时传入的方法参数是否合法。第二个是view函数函数里面声明了一个视图对象接着判断该视图对象如果有get方法,并且没有head方法,那么就把get方法赋值给head方法

2020-09-16 15:51:27 191

原创 在deepin操作系统下安装virtualenvwrapper总结

安装步骤Linux操作系统都自带python,deepin操作系统更是python2.7跟python3.7都自带,但是自带的python似乎没有pip(包管理工具),因此自己安装sudo apt install python3-pip -i https://pypi.tuna.tsinghua.edu.cn/simple接下来安装virtualenvwrapperpip3 install virtualenvwrapper后面可以指定自己想要的源,但不用国内的源速度也不慢,但是在这个过程中要么

2020-09-14 23:24:35 199

原创 SQL优化

在我们书写SQL语句的时候,其实书写的顺序、策略会影响到SQL的性能,虽然实现的功能是一样的,但是它们的性能会有些许差别。因此,下面就讲解在书写SQL的时候,怎么写比较好。①选择最有效率的表名顺序数据库的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表将被最先处理在FROM子句中包含多个表的情况下:如果三个表是完全无关系的话,将记录和列名最少的表,写在最后,然后依次类推也就是说:选择记录条数最少的表放在最后如果有3个以上的表连接查询:如果三个表是有关系的话,将引用

2020-08-07 10:11:34 78

原创 URI与URL

URIURI uniform resource identifier 统一资源标识三个组成部分访问资源的命名机制(通过这个命名机制可以访问资源)存放资源的主机名资源自身的名称URLuniform resource locator 统一资源定位器,是一种具体的URI,即URL可以用来标识一个资源,还可以指明如何locate这个资源、三个组成部分协议(服务方式)存有该资源的主机IP地址(有时也包括端口号)主机资源的具体地址。如目录和文件名等URNuniform r

2020-08-03 05:50:34 62

原创 bootstrap插件里Affix附加导航的理解与使用

确定监测类型与监测链接data-spy="scroll":确定监测类型为滚动data-target="#myScrollspy":确定监测链接为id为myScrollspy的元素添加为affix类时的css使导航栏固定在离顶部30px的位置ul.nav-tabs.affix{ top: 30px; /* Set the top position of pinned element */ }设置添加了附加导航的元素的偏移量意思是使添加了affix(附加导

2020-07-22 23:50:39 464

原创 Bootstrap轮播(Carousel)插件的一些个人学习记录

概念Bootstrap 轮播(Carousel)插件是一种灵活的响应式的向站点添加滑块的方式。除此之外,内容也是足够灵活的,可以是图像、内嵌框架、视频或者其他您想要放置的任何类型的内容。实例与解释<div id="myCarousel" class="carousel slide"> <!-- 轮播(Carousel)指标 ,目的在于可以点击最底下中间的几个小圆点回到相应的轮播内容,0,1,2对应轮播(Carousel)项目里相应的轮播位置索引-->

2020-07-22 16:23:46 191

原创 MySQL之日志

MySQL日志在任何一种数据库中,都有各种各样的日志,记录着数据库工作的方方面面,以帮助数据库管理员追踪数据库曾经发生过的各种事件在MySQL中,有四种不同的日志。分别是错误日志,二进制日志,查询日志,慢查询日志错误日志错误日志是MySQL中最重要的日志之一,它记录了MySQL启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致正常使用时,可以查看此日志该日志是默认开启的,默认存放目录为数据目录(var/lib/mysql),默认日志文件名为hostna

2020-06-23 08:28:30 106

原创 MySQL常用工具

mysqlbinlog由于服务器生成的二进制日志文件以二进制格式保存,如果想要检查这些文本的文本格式,就会使用到mysqlbinlog日志管理工具mysqldumpmysqldump客户端工具用来备份数据库,或在不同数据库之间进行数据迁移。备份内容包括创建表或者插入表的sql语句mysqlimport/sourcemysqlimport是客户端数据导入工具,用来导入mysqldump加-T参数后导出的文本文件mysqlshowmysqlshow客户端对象查找工具,用来

2020-06-20 09:33:03 113

原创 SQL技巧

用正则表达式进行查询select * from tb_name where name regexp ‘科技%’;以正则表达式匹配以科技开头的name字段数字函数与字符串函数数字函数字符串函数

2020-06-19 08:07:29 76

原创 MySQL之锁

概述锁是计算机协调多个进程或线程并发访问某一资源的机制锁分类对数据操作的粒度分表锁:操作时,会锁定整个表行锁:操作时,会锁定当前行对数据操作的类型分读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响写锁(排他锁):当前操作没有完成之前,会阻碍其他写写锁和读锁、如何加表锁MyISAM在执行查询语句(select)前,会自动给涉及的所有表加读锁,在执行更新操作(update,delete,insert)前,会自动给涉及的表加写锁,这个过程并不需要用户

2020-06-18 10:30:13 87

原创 并发参数调整

从实际上看,MySQL是多线程结构,包括后台线程和客户服务线程。多线程可以有效利用服务器资源,提高数据库的并发性能,控制并发连接和线程的主要参数有max_connections,back_log,thread_cache_Size,table_open_cachemax_connections采用max_connections控制允许连接到MySQL数据库的最大数量,默认值是151如果状态变量connection_errors_max_connections不为0,并且一直增长,说明不断有连接

2020-06-15 18:25:39 216

原创 MySQL内存管理及优化

内存优化原则将尽量多的内存分配给MySQL做缓存,但要给操作系统与应用预留足够内存MyISAM存储引擎的数据文件读取依赖于操作系统自身的IO系统排序区,连接区等缓存是分配给每个数据库会话(session)专用的。其默认的设置要根据最大连接数合理分配,如果设置太大,不但浪费资源,而且在并发连接较高时会导致物理内存耗尽(如果分配缓存太多,连接数增多,那么用于其他缓存的可能同时也被大量的消耗,因此不宜太大)MyISAM内存优化MyISAM存储引擎使用key_buffer缓存索引块,加速myisam

2020-06-15 15:31:20 208

原创 数据库之查询缓存

查询缓存配置查看当前的MySQL数据库是否支持查询缓存SHOW VARIABLES LIKE 'have_query_cache';查看当前MySQL是否开启了查询缓存SHOW VARIABLES LIKE 'query_cache_type';查看查询缓存的占用大小SHOW VARIABLES LIKE 'query_cache_size';查看查询缓存的状态信息show status like 'Qcache%';以下是各个变量的含义开启查缓存修改配置文件vi /us

2020-06-15 10:26:41 1485

原创 mysql之应用优化

应用优化数据库本身性能局限,就必须对前台应用进行一些优化,来降低数据库的访问压力对于访问数据库来说,建立连接的代价十分昂贵。因为我们频繁的创建关闭连接,是比较耗资源的,所以有必要建立连接池,以提高访问的性能减少对MySQL的访问避免对数据进行重复检索在编写代码时,能够一次连接就获取结果的,就不用俩次连接,这样可以减少对数据库无用的重复请求增减cache层缓存有多种,也有多种实现方式负载均衡利用某种均衡算法,将固定的负载量分布到不同的服务器上,以此来降低单台服务器的负载,达到

2020-06-14 15:28:41 134

原创 SQL优化

大批量插入数据1.建议主键顺序插入,因为主键无序排列文件插入的时候需要花费大量的时间,下面举有列子准备两个存放数据内容的sql语句文件(head 为查询文件前面几行数据的命令)有序数据无序数据加载数据到数据库load data local infile ’/xxx/xxx/xxx.log' into tb_name fields terminated by ',' lines terminated by '\n';意思为从本地文件系统xxx路径加载数据到tb_nam

2020-06-14 10:15:39 78

原创 MySQL全值索引与最左查询法则及索引失效的情况

全值匹配对索引中所有列都指定具体值,该情况下,索引生效,执行效率高。select all from tb_name where name='huawei' and status='1' and address='北京市';最左前缀法则在复合索引中,如果查询了多列,索引需要从最左列开始,且不跳过中间的列。最左前缀索引反例跳过name,status去查adress,同样显示用到的索引(key)为空在查询中调换顺序,那么显示用到了索引,所以这个跟查询时使用的索引位置信息无关,只要给的索引

2020-06-13 10:07:53 767

原创 MySQL之优化sql

为什么要进行优化在应用开发过程中,由于数据量较小,开发人员写sql语句时往往侧重功能的实现。而随着上线,数据量加大,很多sql语句也开始产生性能上的问题,对生产的影响越来越大,因此就需要对这些sql语句进行优化查看sql执行频率show [session|global] status like 'Com_______';#注意:七个_,session表示当前连接的查询,默认,global代表自数据库创建整个的操作处理执行频率show [session|global] status like

2020-06-11 11:51:46 92

原创 MySQL之存储引擎笔记

概述存储引擎就是存储数据,建立索引,更新查询数据等等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可以称为表类型可以通过show engines查看MySQL支持的存储引擎在创建表时设置ON DELETE RESTRICT#就表示在删除主表数据时,如果有关联记录,则不删除ON UPDATE CASCADE#表示在更新主表数据时,如果子表有关联记录,则同样更新子表MyISAM存储引擎不支持事务,也不支持外键,特点是访问速度快。对事物的完整性没有要求,或者以sel

2020-06-09 18:14:42 142

原创 MySQL之触发器总结

创建触发器语法结构create trigger trigger_namebefore/after insert/update/deleteon db_name[for each row]begin strigger_stmt;end$实例:通过触发器记录emp表中的数据删除更新插入#先创建一张日志表emp_logs,这里省略#创建插入触发器create trigger emp_insert_triggerafter inserton empfor each row

2020-06-09 10:07:10 223

原创 MySQL存储过程总结

存储过程概念:事先经过编译并存储在数据库的一段SQL语句集合创建存储过程delimiter $ #声明分隔符为$,因为sql语句中可能会有分隔符;,而;出现会导致SQL认为编辑结束,就会执行create procedure procedure_name([proc_parameter[...]])begin sql语句end$调用储存过程call procedure_name()查看存储过程#第一种方式select name from mysql.proc whe

2020-06-09 09:23:37 121

原创 MySQL索引与视图总结

索引是帮助MySQL高效获取数据的数据结构(有序),这些数据结构以某种方式指向数据,是在MySQL的存储引擎层实现的BTREE索引,最常见的索引,大部分存储引擎都支持索引语法创建数据库create database demo01 default charset-utf8mb4使用该数据库use demo01创建表结构省略插入数据省略创建索引create [unique|fulltext|spatial] index index_name [using index_type] on tb

2020-06-08 14:42:58 822

原创 创建django项目

安装虚拟环境1.安装virtualenvsudo pip install virtualenvsudo pip install virtualenvwrapper创建python虚拟环境以下命令在命令行窗口实现mkdir GP1cd GP1mkdir day01cd day01#创建python3虚拟环境mkvirtualenv GP1 -p /usr/bin/python3#退出虚拟环境deactivate#进入虚拟环境workon GP1#安装django

2020-06-04 18:06:30 83

原创 python内置函数之base64

base64编码base64.b64encode(str)#由于base64编码可能出现+和/,在url中不能直接作为参数。因此有’url safe‘的base64编码,可以使+/变成-_base64.urlsafe_b64encode(str)解码base64.b64decode(str)=也可能出现在base64编码中,但=用在url,cookie中会造成歧义,因此很多base64会把=去掉因为编码后的字节长度永远是4的倍数,因此解码可以根据差了多少(1/2/3个)字节

2020-06-03 17:08:10 950

原创 python内建模块之collections

namedtuplenamedtuple用来创建一种自定义的tuple对象,并且规定tuple元素的个数。并且用属性而不是用索引来引用tuple的某个元素。这样,用namedtuple可以很方便地定义一种数据类型#创建from collections import namedtuplePoint = namedtuple('Point',['x','y'])#使用p = Point(1,2)print(p.x)print(isinstance(p,point)print(isinsta

2020-06-02 17:44:43 130

原创 python内建模块之datetime

获取当前时间>>> from datetime import datetime>>> now = datetime.now() # 获取当前datetime>>> print(now)2015-05-18 16:28:07.198690>>> print(type(now))<class 'datetime.datetime'>获取指定日期和时间>>> from datetime impo

2020-06-02 15:45:03 85

原创 python中的正则表达式总结

\d:匹配一个数字\w:可以匹配一个字母或数字.:可以匹配任意字符*:表示任意字符(包括0个)+:表示至少一个字符?:表示0个或1个字符{n}:表示n个字符{m:n}:表示第m-n个字符可以用[]表示范围:[0-9a-zA-Z_]+可以匹配至少由一个数字、字母或者下划线组成的字符串A|B:可以匹配A或B,如(P|p)ython可以匹配’Python’或者’python’。^表示行的开头 ^\d表示必须以数字开头。$表示行的结束,\d$表示必须以数字结束。贪婪匹配正则匹配默认是贪婪匹

2020-06-01 08:55:15 197

原创 python之ThreadLocal

一个ThreadLocal变量虽然是全局变量,但每个线程都只能读写自己线程的独立副本,互不干扰。ThreadLocal解决了参数在一个线程中各个函数之间互相传递的问题。import threading # 创建全局ThreadLocal对象:local_school = threading.local()def process_student(): # 获取当前线程关联的student: std = local_school.student print('Hello

2020-05-30 09:44:03 342

原创 python之多线程

threading启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行:import time, threading# 新线程执行的代码:def loop(): print('thread %s is running...' % threading.current_thread().name) n = 0 while n < 5: n = n + 1 print('thread %s >>..

2020-05-29 17:30:53 152

原创 python之多进程

multiprocessingmultiprocessing模块就是跨平台版本的多进程模块。from multiprocessing import Processimport os# 子进程要执行的代码def run_proc(name): print('Run child process %s (%s)...' % (name, os.getpid()))if __name__=='__main__': print('Parent process %s.' % os.g..

2020-05-29 16:22:02 128

原创 python中的序列化

把一个python对象序列化为jsom>>> import json>>> d = dict(name='Bob', age=20, score=88)>>> json.dumps(d)'{"age": 20, "score": 88, "name": "Bob"}'dumps()方法返回一个str,内容就是标准的JSON。类似的,dump()方法可以直接把JSON写入一个file-like Object。要把JSON反序列化为Pyth..

2020-05-29 12:04:46 197

原创 python中操作文件和目录

我们要操作文件、目录,可以在命令行下面输入操作系统提供的各种命令来完成。比如dir、cp等命令。但如果在python程序中执行这些目录和文件的操作怎么办:Python内置的os模块可以直接调用操作系统提供的接口函数。环境变量在操作系统中定义的环境变量,全部保存在os.environ这个变量中,可以直接查看:>>> os.environenviron({'VERSIONER_PYTHON_PREFER_32_BIT': 'no', 'TERM_PROGRAM_VERSION'

2020-05-28 18:42:52 166

原创 python之文件读写

现在的操作系统不允许程序直接操作磁盘。所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。读文件f = open('/Users/michael/test.txt', 'r')#传入文件名和标识符如果文件不存在,会报出IOError错误如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示:>>

2020-05-28 18:05:03 146

原创 python中使用type()来创建类

type()可以查看一个类型或变量的类型也可以用来创建类>>> def fn(self, name='world'): # 先定义函数... print('Hello, %s.' % name)...>>> Hello = type('Hello', (object,), dict(hello=fn)) # 创建Hello class>>> h = Hello()>>> h.hello()Hello, w..

2020-05-28 08:54:32 143

原创 python中的枚举类

每个常量都是class的唯一一个实列为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了Enum类来实现这个功能from enum import Enum Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))这样就获得了Month类型的枚举类,可以直接使用Month.Jan来引用一个..

2020-05-27 22:53:15 243

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除