Python 项目的配置管理

标签:Python

每次开始一个新的 Python 项目,我都会为怎么管理配置文件而头疼。不过在迁移我的博客时,终于有空花了点时间,把这件事想清楚。
一年多的时间过去了,一切似乎都很顺利,连我在知乎所做的新项目也沿用了该方案,于是决定把解决方案记录下来。

初探 Python 3 的异步 IO 编程

标签:Python

上周终于把知乎日报的新版本做完了,于是趁着这几天的休息,有精力折腾一些感兴趣的玩意了。
虽然工作时并不会接触到 Python 3,但还是对它抱有不少好奇心,于是把 Python 版本更新到了 3.4,开始了折腾之旅。

我有特别的 Python 加密技巧

标签:Python

虽说 Python 代码的可读性很高,但你能读懂下面的代码么?
# -*- coding: rot_13 -*-

cevag 'uryyb jbeyq!'.rapbqr('rot_13')
嗯,它只是个 hello world 而已。

我有特殊的 Python 补全技巧

标签:Python

平时在用 Python 的命令行来调试时,由于没有 IDE / 编辑器的代码补全,总会觉得比较累。
受不了的人就用起 IPython、bpython 来了。可问题是装这些玩意得下载啊,如果只是临时用用,实在太不方便了。
还好 Python 自带了一个 rlcompleter 模块,几行代码就能解决这个问题。

Python 装逼篇之 Ellipsis

标签:Python

刚才无聊时折腾了一个高端大气上档次的等差数列生成器,演示结果如下:
>>> maker = ProgressionMaker()
>>> maker[1, 2, ..., 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> maker[6, 13, ..., 34]
[6, 13, 20, 27, 34]
虽然看上去很厉害的样子,但其实没什么技术含量……

Python 模板引擎比较

标签:Python

做 Web 开发少不了要与模板引擎打交道。我陆续也接触了 Python 的不少模板引擎,感觉可以总结一下了。

记录一段关于密码处理的 Python 代码

标签:Python

这是昨晚写的一段关于密码处理的代码,包含生成 salt、加密密码、生成随机密码和检验密码。
结果今天懒得用了,主要是懒得写修改密码、重设密码、找回密码这些页面,于是就用 Google 的 OAuth 代替了。
感觉删了也可惜,以后说不定会用到,就放这吧。

记录 Python 处理 cookie 时的一个 bug

标签:Python

几周前我遇到了一个问题,某个用户说她无法登录我们的网站。我记录了她的 cookie,发现它是以 ',BRIDGE_R=;' 开头的,其中包含了一个非法字符。
而 Tornado 使用 Cookie.SimpleCookie.load() 方法来解析 cookie:
class HTTPRequest(object):
    @property
    def cookies(self):
        """A dictionary of Cookie.Morsel objects."""
        if not hasattr(self, "_cookies"):
            self._cookies = Cookie.SimpleCookie()
            if "Cookie" in self.headers:
                try:
                    self._cookies.load(
                        native_str(self.headers["Cookie"]))
                except Exception:
                    self._cookies = {}
        return self._cookies
在遇到非法的 cookie 时就会抛出异常,所以 self._cookies 就变成一个空字典了。这样服务器就取不到用户的 cookie,只能当成一个未登录的用户来处理。
而在用户尝试登录以后,虽然写入了正确的登录信息,却仍然无法被读取,于是就不可能成功登录了。

关于 logging 的一些琐事

标签:Python

虽说 logging 模块都用了好久了,不过由于文档不够详细,每次都忍不住去搜索别人的文章,于是就干脆记录下来吧。

« 看看还有什么好玩意