阿小信大人的头像
Where there is a Python, there is a way. 阿小信大人

flask通过nginx代理后base_url拿不到正确的url_scheme2016-04-14 12:31

Nginx配置了https请求后,用户发起https请求时首先和Nginx建立连接,完成SSL握手,而后Nginx作为代理是以http协议将请求转给gunicorn处理的,Nginx再把gunicorn的输出通过SSL加密发回给用户,这中间是透明的,gunicorn只是在处理http请求而已。

这时即使请求时用的是https,flask中的request中`wsgi.url_scheme`收到的仍然是http,所以在其他url相关的地方的值都是http链接。

解决办法是在flask中使用ProxyFix,并且确保nginx配置中设置了`Host`和`X-Forwarded-Prot

......
#Python#   #flask 评论[0]阅读全文[1189]

Redhat backport Python2.7.5的一个bug2016-03-02 15:54

Redhat新机器上在用到一个Python第三方库suds时报错:

File "/srv/ves/talaris.courier/.venv/lib/python2.7/site-packages/suds/client.py", line 542, in __call__
return client.invoke(args, kwargs)
File "/srv/ves/talaris.courier/.venv/lib/python2.7/site-packages/suds/client.py", line 602, in invoke

......
#Python#   评论[0]阅读全文[1662]

[转]Python任务调度模块 – APScheduler2016-01-05 18:30

原文:

APScheduler是一个Python定时任务框架,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务、并以daemon方式运行应用。

#### 在APScheduler中有四个组件:

触发器(trigger)包含调度逻辑,每一个作业有它自己的触发器,用于决定接下来哪一个作业会运行。除了他们自己初始配置意外,触发器完全是无状态的。

作业存储(job store)存储被调度的作业,默认的作业存储是简单地把作业保存在内存中,其他的作业存储是将作业保存在数据库中。一个作业的数据讲在保存在持久化作业存储时被序列化,并在加载

......
#Python#   评论[0]阅读全文[1570]

python ftp 上传下载demo2015-09-14 17:34


#!/usr/bin/env python
# encoding: utf-8
from ftplib import FTP


class Ftp(object):

def __init__(self, host, user, passwd, **kwargs):
self.ftp = FTP(host=host, user=user, passwd=passwd, **kwargs)
print(self.ftp.getwelcome())

......
#Python#   评论[0]阅读全文[1163]

flask处理ajax跨域请求2015-09-11 18:31

前后端的分离不得不涉及到ajax请求的跨域问题。

前端在发起ajax请求时,浏览器会先发一个options请求来试探后端,如果response headers里面的信息允许这个请求才会进行接下来真实的请求。

一般的跨域问题只需在response headers中设置`Access-Control-Allow-Origin`为指定的域名或者`*`就能解决,如:

headers = {"Access-Control-Allow-Origin": "*"}
return Response(json_dumped, mimetype='application/jso

......
#Python#   #flask 评论[0]阅读全文[3139]

Flask-SQLAlchemy的一点问题记录2015-09-11 18:15

### Flask-sqlalchemy查询指定字段

your_model_object.query.with_entities(Your_model.your_attribute)

类似于sqlalchemy的

session.query(Your_model.your_attribute).filter(...)

返回的是一个namedtuple

### flask-sqlalchemy MySQL server has gone away

MySQL默认移除闲置多于 8 小时的连接。使用 Flask-SQLALchemy 连接了 MyS

......
#Python#   #flask 评论[4]阅读全文[2267]

flask视图函数的装饰器必须用到wraps2015-09-11 17:38

之前遇到一个一直没意识到得问题。为flask的视图添加装饰器需要注意的一点是必须使用wraps。

wraps的作用之一是改变函数的`__name__`

如果你的装饰器不用wraps,那么使用装饰器后原本不同两个函数的名字都变成了相同的名字。在flask的视图中这样会造成函数名冲突,提示

AssertionError: View function mapping is overwriting an existing endpoint function

所以装饰器应该写成

:::python
def login_required(func):

......
#Python#   #flask 评论[0]阅读全文[1392]

What “is” a fuck in Python2015-07-01 17:45

CPython的优化

>>> x = 'a' * 20
>>> y = 'a' * 20
>>> x is y
True
>>> x = 'a' * 21
>>> y = 'a' * 21
>>> x is y
False
>>> x = 'a' * 21; y = 'a' * 21
>>> x is y
False
>>> x = 'aaaaaaaaaaaaaaaaaaaaa'
>>> len(x)
21
>>> y = 'a

......
#Python#   评论[0]阅读全文[1256]