Tornado Remote IP

2019-09-20

由于 Tornado 部署在 Nginx 后面,通过 self.request.remote_ip 总是只能拿到 Nginx 地址。


Django 3.0 发布,开始支持异步功能

2019-09-16

Django 项目组试图在保持向后兼容的基础之上,对阻塞部分进行改造,使之支持异步(通过装饰器的方式)。
包括 Session、Auth、ORM 与 Handlers 等。

ASGI 模式将 Django 作为原生异步应用程序运行,原有的 WSGI 模式将围绕每个 Django 调用运行单个事件循环,以使异步处理层与同步服务器兼容。

在这个改造的过程中,每个特性都会经历以下三个实现阶段:

  • Sync-only,只支持同步,也就是当前的情况
  • Sync-native,原生同步,同时带有异步封装器
  • Async-native,原生异步,同时带同步封装器

Django 3.0 开始提供运行 ASGI 应用支持,让 Django 逐渐具备异步功能。做了这一改动后,Django 现在会感知到异步事件循环,并将阻止从异步上下文调用标记为“异步不安全”的代码(例如 ORM 操作),如果开发者之前使用的是异步代码,则可能会触发。如果看到 SynchronousOnlyOperation 错误,可以仔细检查代码并将数据库操作移到同步子线程中。

其它方面,Django 现在支持 MariaDB 10.1 及更高版本;新的 ExclusionConstraint 类可以在 PostgreSQL 上添加排除约束;输出 BooleanField 的表达式现在可以直接在 QuerySet 过滤器中使用,而无需先注解然后对注解进行过滤;自定义枚举类型 TextChoices、IntegerChoices 和 Choices 现在可用作定义 Field.choices 的方法。

需要特别注意的是:自从 2.2 之后,Django 将不再支持 Python 3.5。

更新说明:https://docs.djangoproject.com/en/dev/releases/3.0


字体研究

2019-06-21

利用 Python 的 fonttools 包解析字体。


聊一聊众 Webdrivers

2019-06-20

WebDriver 是浏览器自动化工具。

主要的用途:

  1. 自动化测试
  2. 爬虫
  3. 网页截图

知名的:

  • Selenium
  • Puppeteer

Python Supervisor 的简单配置

2019-03-11

Python 定时任务的简单部署

2018-12-20

Python 与 HTTP/2

2018-12-13

HTTP/2 都出来三年半了,还没有一个好用的 Python 客户端库,真是的。


PEP

2018-11-22

主要是了解一下 PEP(Python Enhancement Proposal)的状态和类型。


Python 输出 Unicode 字符到标准输出时遇到 UnicodeEncodeError

2016-06-22

源代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

print u'中国'

报错:

Traceback (most recent call last):
File "test.py", line 4, in <module>
print u'中国'
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

Python 设置系统默认编码

2016-01-23

关于 sys.setdefaultencoding 的一些问题。


安装和使用 pep8

2015-12-01

pep8 是一个遵守 PEP8 编码规范的 Python 代码检测工具。


单文件启动 Django 应用

2015-09-15

没有什么实际意义,只是玩玩而已。


Unicode 编码中中文字符的范围

2015-08-25

用 Python 改写 PHP 加密解密算法 authcode

2013-12-18

刚刚读了一遍 Discuz 系列产品中广泛使用的加密解密算法 authcode,受益匪浅,真是设计巧妙。
为了真的理解其中的想法,用 Python 改写了一遍。


Tornado 1,2,3

2013-10-13