小知识
''' 幂等性:就是用户对于同一操作发起一次请求或者多次请求的结果是一致的,不会因为多次点击而产生副作用。 举个最简单的例子,那就是支付,用户购买商品使用网络支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条,用幂等性就是解决这一问题. 在数据库操作中要用到幂等性,put和patch请求是幂等性,post请求不是幂等性 '''
''' 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。 '''
''' 松耦合:各自可以独立实现,各自执行独立的功能,代码中没有互相调用,如果需要互相配合,则由第三者来控制它们之间的互相访问. 紧耦合:各自可以独立实现,但两者之间可以相互访问. 松耦合通讯机制提供了紧耦合机制所没有的许多优点,并且它们有助于降低客户端和远程服务之间的依赖性。但是,紧耦合性通常可以提供性能好处,便于在客户端和服务之间进行更为紧密的集成(这在存在安全性和事务处理要求时,可能是必需的)。 '''
前后端分离
前端一个项目,后端一个项目
集群和分布式
''' 分布式是指将不同的业务分布在不同的地方。 而集群指的是将几台服务器集中在一起,实现同一业务。 分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。 举例:小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是集群。为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群
开放media路径
-创建meidia文件夹(在根路径下) -在setting中配置: MEDIA_ROOT=os.path.join(BASE_DIR,'media') -在urls.py中 from django.views.static import serve from luffy_city import settings urlpatterns = [ url(r'^media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT}), ]
所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。 事务广泛的运用于订单系统、银行系统等多种场景. 例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。所以,应该把他们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。 关系型数据库存在事务 事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 1.原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。 2.一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 3.隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 4.持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
1.__str__ 和 __repr__区别? __str__:改变对象的字符串显示,可以理解为使用print函数打印一个对象时,会自动调用对象的__str__方法 __repr__:在python解释器环境下,会默认显示对象的__repr__表示. 总结:str函数或者print函数调用的是obj.__str__() repr函数或者交互式解释器调用的是obj.__repr__() 如果__str__没有定义,那么就会使用__repr__来代替输出 __str__和__repr__方法的返回值必须是字符串 2.什么是正向代理,什么是反向代理? 代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介。 正向代理:正向代理类似一个跳板机,代理访问外部资源. 比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了 反向代理:实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器. 总结: 正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端. 反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端 3.产生一个空对象调用__new__方法 __init__方法,把数据初始化到对象的内部 对象()调用__call__方法 4.Django项目部署? nginx+uwsgi+django nginx是一个高性能的HTTP和反向代理服务,它可以做到负载均衡、动静分离
HTTP协议 请求首行 请求头 请求体 django的GET,POST,META,body分别对应HTTP请求的那部分内容? GET:http请求路径中的数据部分 POST:http请求以urlencode/formdata形式编码的body体部分 META:http请求头部信息 body:http请求请求体部分 path,get_full_path(),FILES
1.python3:默认utf-8 python2:默认ASCII 2.python3中默认所有类都是新式类而python2中默认是经典类(不会自动继承Object) 3.在python3只有一个input特点:会把用户输入的任何内容都存成字符串类型 在python2中 input:要求用户必须输入一个明确的类型,用户输入什么类型,就存成什么类型 raw_input:等于python3的input
4.在python2 中 5/2=2 , 5.0/2.0=2.5
在python3中 5/2 = 2.5
5.python2中的range返回的是一个列表
python3中的range返回的是一个迭代值
python2中的xrange相当于python3中的range
#python3.6安装xadmin python3安装Xadmin失败,UnicodeDecodeError解决方法 https://blog.csdn.net/fowee/article/details/83780934 两种安装方式 https://www.cnblogs.com/thunderLL/p/6803469.html 安装包的路径(pycharm提供的是python2版本适用的python3各种报错,必须从github上下载) https://github.com/sshwsfc/xadmin/tree/django2 问题解决方案 https://blog.csdn.net/baoshuowl/article/details/80355807 https://blog.csdn.net/Snail0Li/article/details/79694781
如果使用Auth组件user表,它会自动完成映射
其他的表在admin.py文件中完成映射
import xadmin
xadmin.site.register('表名')
#单个图片或者文件 request.FILES.get #多张图片或者文件 request.FILES.getlist
render 返回页面
如果没有使用locals()就只能返回字典
locals()可以返回所有数据
一、本质区别: 1.js都知道是网页脚本语言,类似java是一种开发常用语言; 2.jQuery是基于js语言封装出来的一个前端框架; 所以最本质的区别就是js是一种语言,而jQuery是基于该语言的一种框架。除却最本质的区别还有一些用法上的差别
ALT + ENTER import this name 回车 选择要引入的模块或者包 回车
比如要引进requests
requests.post() #游标要放到requests后面进行操作才可以
MySQL存储引擎--MyISAM与InnoDB区别
InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。 以下是一些细节和具体实现的差别: 1.InnoDB不支持FULLTEXT类型的索引。 2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。 3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。 4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。 5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。 另外,InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%” 两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁。而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。 作为使用MySQL的用户角度出发,Innodb和MyISAM都是比较喜欢的,如果数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是首选。
python字符串与列表之间相互转化
1.字符串转列表 str1 = "hi hello world" print(str1.split(" ")) 输出: ['hi', 'hello', 'world'] 2. 列表转字符串 l = ["hi","hello","world"] print(" ".join(l)) 输出: hi hello world "," 用逗号隔开 ";" 用分号隔开
python如何忽略警告
import warnings warnings.filterwarnings("ignore")
python赋值,浅拷贝和深拷贝
import copy a = [1,2,3,[4,5]] b = a c = copy.copy(a) #浅拷贝 d = copy.deepcopy(a) #深拷贝 a[3].append(6) a.append(7) print(b) #[1, 2, 3, [4, 5, 6],7] print(c) #[1, 2, 3, [4, 5, 6]] print(d) #[1, 2, 3, [4, 5]] copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。 copy.deepcopy 深拷贝 拷贝对象及其子对象 a是一个列表,a[3]也是一个列表(也是a的一个子对象) b是a的一个引用,所有a和b完全相同 c是浅拷贝,只拷贝了a的父对象,因此a的子对象改变,c也改变,父对象改变,c不改变 d是深拷贝,父对象和子对象全部拷贝,a改变对d完全没有影响
包装类的私有属性即隐藏属性
_类名__属性名
在外部调不到,self可以调到