import hashlib
import base64
data = '123456'
data = data.encode('utf-8')
md5 = hashlib.md5()
md5.update(data)
print ("md5加密 :%s"%md5.hexdigest())
sha1 = hashlib.sha1()
sha1.update(data)
print ("sha1加密: %s"%sha1.hexdigest())
sha224 = hashlib.sha224()
sha224.update(data)
print ("sha224加密: %s"%sha224.hexdigest())
sha256 = hashlib.sha256()
sha256.update(data)
print ("sha256加密: %s"%sha256.hexdigest())
sha384 = hashlib.sha384()
sha384.update(data)
print ("sha384加密: %s"%sha384 …
>>> import datetime
string转datetime
>>> import datetime
>>> str = "2016-04-03"
>>> date_time = datetime.datetime.strptime(str,'%Y-%m-%d')
>>> date_time
datetime.datetime(2016, 4, 3, 0, 0)
datetime转string
>>> date_time.strftime('%Y-%m-%d')
'2016-04-03'
datetime转时间戳
>>> time_time = time.mktime(date_time.timetuple())
>>> time_time
1459612800.0
时间戳转string
>>> time.strftime('%Y-%m-%d',time.localtime(time_time))
'2016-04-03'
def index():
if form.validate_on_submit() and request.method == "POST":
# do something
else:
# 这里使用**redirect**重定向而不是render_template
问题是这样的: 1只母羊,在第2年和第4年生下小母羊,在第5年死去,问N年后有多少母羊?
想了很久,终于有了一个思路,不过目前效率不高
给出代码:
a = [1]
def sheep(N):
N = int(N)
if N == 1:
return a
for n,k in enumerate(a):
a[n] += 1
for n,k in enumerate(a):
if k == 2:
a.append(1)
if k == 4:
a.append(1)
return sheep(N-1)
while True:
b = sheep(input('请输入年份:\n'))
c = [i for i in …
map
map()函数接收两个参数,一个是函数,一个是Iterable, map将传入的函数依次作用到序列的每个元素, 并把结果作为新的Iterator返回。
>>> def f(x):
... return x * x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
或者
>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']
reduce
reduce把一个函数作用在一个序列[x1, x2, x3, ...]上 …
fabric也使用好久了,这次静下心来好好整理一遍,当然这只是很简单的用法
参考文档
安装
凡事先从安装说起,fabric不支持python3,所以只能安装python2版本的fabric
由于我使用了virtualenv,所以先退出虚拟环境
$ deactivate
安装全局fabric
$ sudo pip2 install fabric
使用
使用之前先想想以前是怎么部署的,是不是这样:
先ssh到服务器,进行数据备份,然后退出(或者重新开一个终端),然后上传文件到服务器,
再ssh到服务器,安装所需要的模块,然后退出,ssh到root账户,重启,再退出···
是不是想想都烦
没关系,有了fabric后就不必这么麻烦了,需求:
备份数据
# fabfile.py
from fabric.api import run, env, cd, local, put, get
def backup():
env.user = 'root'
dirname = 'backup_' + datetime.now().strftime('%Y%m%d')
with cd('/root/backup …
简单的例子这里已经有了
中文
这里记录一下平时我遇到的一些问题
一对多
需求:一个问题对应多个回复
下面给出代码(字段不完整)
class Questions(db.Model):
__tablename__ = 'questions'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(50), nullable=False)
content = db.Column(db.Text, nullable=False)
def __init__(self,title,content):
self.title = title
self.content = content
def __repr__(self):
return "<Questions %r>" % self.title
class Replies(db.Model):
__tablename__ = 'replies'
id …
都可看做是where但用法不一样
filter_by
question = Questions.query.filter_by(id=1).first()
filter
question = Questions.query.filter(Questions.id==1).first()
其实就是=
与==
还有是否带类名的区别
如果要select * from questions where id < 5
这时只能使用filter
questions = Questions.query.filter(Questions.id < 5).all()
多个条件
question = Questions.query.filter_by(name='hello',id=5).first()
# 或者
question = Questions.query.filter(Questions.name=='hello',Questions.id==5).first()
也就是降序排序
简单使用
questions = Questions.query.order_by(Questions.time.desc()).all()
设置默认排序
如果几乎所有的questions都是按照时间降序排序,总不能每一条语句都加上order_by(Questions.time.desc())
所以设置默认排序是有效的
class Questions(db.Model):
__tablename__ = 'questions'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(50), nullable=False)
content = db.Column(db.Text, nullable=False)
time = db.Column(db.DateTime, nullable=False)
__mapper_args__ = {
"order_by": time.desc()
}
如代码所示,使用__mapper_args__
就可,__mapper_args__
可以做很多事,具体看 …
·参考
循环
ranger(100)表示0到99这一百个数
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
把list、dict、str等Iterable变成Iterator可以使用iter()函数
不可变对象
>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'
列表(list)
# 向列表追加元素
a = ['hello','h','a','b']
a.append('world')
# 删除列表最后一个元素
a.pop()
切片
# 从a[0]开始到a[2]
a[0:3]
# 或者,省略0
a[:3]
# 省略-1
a[-2:]
# 每两个取一个
a[::2]
迭代
判断是否可迭代
isinstance(x, Iterable)
下标循环
>>> for i, value in …