在标准的dgango项目中,自动生成的目录结构会包括models.py和views.py两个文件,分别在里面写model的代码和controller的代码,但是所有的代码都写在一个文件里面在大项目中不好维护,因此需要拆分开来写。
Python-@classmethod和@staticmethod的区别
基础概念
这个问题的原文答案在:http://pythoncentral.io/difference-between-staticmethod-and-classmethod-in-python/
一个类中的方法最常用的是实例方法,即以self为第一个参数的方法,如下代码所示:
Python-迭代器
首先看一下这个文档:文档链接
从文档中有几个重要的信息:
- 可迭代对象(Iterable):可以直接作用于for循环的对象,实现了iter()方法。
- 迭代器(Iterator):可以被next()函数调用并不断返回下一个值的对象。
- 生成器都是Iterator对象,但集合数据类型虽然是Iterable,却不是Iterator
- 可以使用iter()把Iterable变成Iterator
iter()函数
iter()的定义:
|
|
- iter(iterable)
函数参数必须是可迭代对象,支持迭代器协议(iteration protocol)或者是序列协议(sequence protocol)。也就是实现了iter()方法或者getitem()方法,如下所示:
|
|
- iter(callable, sentinel)
当有两个参数的时候,则第一个参数必须是可调用的对象(实例)即定义了call方法,这时候iter会生成一个迭代器(Iterator),每次调用这个迭代器的next()方法(在python2中是next()方法),都会调用callable,如果next()方法返回等于sentinel,则抛出StopIteration报错,否则返回下一个值。如下代码:
|
|
Python-迭代
给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,我们称为迭代(iteration)。
在python中,迭代是通过for…in…来实现的,在java和c中是通过下标来完成的,从这个角度来说,python是一种更加高级的抽象。
Python-生成器
通过List Comprehensions,我们可以很方便的生成一个列表,但是受限于内存等原因,列表的长度是有限制的,例如我们创建一个100w长度的列表,既浪费了空间,又如果我们只需要部分数据的话,那么大部分空间就被浪费了。
所以,如果列表中的元素可以按照某种固定的算法推导出来,我们就可以在迭代中不断地通过这个算法计算出后面的值,这在python中叫做生成器(generator)。
利用window.performance.timing检测页面加载速度
Linux-文件读写
- 文件读写原子性:所有的系统调用都是以原子操作方式执行的,内核保证了某系统调用中的所有步骤会作为独立操作而一次性加以执行,期间不会被其他进程或线程所中断。
cmake使用
CMake是一个跨平台的程序构建工具,比如起自己编写Makefile方便很多。
本文件不介绍CMake的基本语法,下面是篇不错的入门教程:
http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/
ssh远程登录忽略“know hosts”检验
我们在生产环境一般会配置一台跳板机,可以免密登录线上所有的机器,但是默认在登录的时候配置了ssh key之后还会要求输入“yes”然后登录,这种非常不方便,我们可以改一下跳板机的配置文件,忽略这个步骤:
spring自定义注解实现简单权限管控
有时候我们需要在提交请求的时候验证某个用户是否具有某些权限,这些有security等框架可以帮我们做掉,但是有时候只需要简单的权限验证,不需要这么强大的框架帮助,因此就可以借助自定义注解实现一些简单的权限验证功能。