记录pip安装时报的错


Table of Contents

Pillow

ValueError: jpeg is required unless explicitly disabled using --disable-jpeg, aborting

    ----------------------------------------
Command "/home/***/***/venv/bin/python3.4 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-k9djbrwk/Pillow/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-i_zr9z4a-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/***/***/venv/include/site/python3.4 …

flask时间格式化


在前端显示为该问题 "几分钟前发表或几天前发表"

后端通过filter注册

参考资料

设计需求

  • 如果问题发表超过 10天 ,则显示为 /%Y-%m-%d %H:%M/
  • 如果小于 10天 ,但是大于 1天 ,则显示为 /n天前/ 发表
  • 如果小于 1天 ,但是大于 1小时 ,则显示为 /n小时前/ 发表
  • 如果小于 1小时 ,但是大于 90秒 ,则显示为 /n分钟前/ 发表
  • 如果小于 90秒 ,则显示为 /刚刚/ 发表

具体实现

通过 diff.daysdiff.seconds 实现

比如,大于10天

if diff.days > 10:
    return dt.strftime('%Y-%m- …

基于restful的flask权限管理


为什么需要restful形式的权限管理

最近在写flask应用时使用了 restful 形式的flask.views.MethodView,但是在对其进行权限管理时遇到了一些问题

flask文档上介绍说用

decorators = []

添加装饰器,但实际使用上,比如

  • getpost 采用不同的权限

get 不使用 login_required
post 需要 login_required

这样就不能使用 decorators 对视图进行装饰

  • post ,delete, put 都需要 login_required,但是get不需要 而 delete 又需要更高级别的权限,我们可以这样

    class AAA(MethodView):
    
        def get(self,uid):
            ...
    
        @login_required
        def post(self):
            ...
    
        @login_required
        def put(self,uid):
            ...
    
        @login_required
        @more_required
        def delete(self,uid):
            ...
    

    是不是看起来还不错, 但是,如果再加上类似EditBlogPostPermission …

sqlalchemy学习(一)


sqlalchemy

系统的学一下sqlalchemyA,不过没有中文文档,只能用我的渣英文能力慢慢看原文档了

数据库连接

>>> from sqlalchemy import create_engine
>>> engine = create_engine('sqlite:///:memory:', echo=True)

echo为True输出日志

各种数据库连接方式

dialect+driver://username:password@host:port/database
  1. Postgresql

    # default
    engine = create_engine('postgresql://scott:tiger@localhost/mydatabase')
    # psycopg2
    engine = create_engine('postgresql+psycopg2://scott:tiger@localhost/mydatabase')
    # pg8000
    engine = create_engine('postgresql+pg8000://scott:tiger@localhost/mydatabase')
    
  2. MySQL

    # default
    engine = create_engine('mysql://scott:tiger@localhost/foo')
    # mysql-python
    engine = create_engine('mysql …

python一些加密解密


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 …

python时间转换


>>> 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'

母羊生羊问题解决


问题是这样的: 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 …

python复习(二)


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, ...]上 …

flask-sqlalchemy使用


简单的例子这里已经有了
中文 这里记录一下平时我遇到的一些问题

一对多

需求:一个问题对应多个回复
下面给出代码(字段不完整)

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 …