0%

记得当初学习计算机网络的时候,在机房用得比较多的是老旧的 sniffer,自己动手的时候用的比较多的是 wireshark。后面做 Web 开发的时候,用 Fiddler 比较顺手,也比较轻便,满足日常开发的需求。当然熟练的话也可以直接用 tcpdump 之类的工具。后面在用 Python 做安全方面的内容的时候,发现了 Scapy 这么一个强大的嗅探库(不是爬虫框架 Scrapy),支持 Py2 和 Py3,而且在 QPython 上也集成了。这个还真的是利器啊!

阅读全文 »

在实际生产环境中,日志是我们排查错误的重要手段,好的日志系统可以让你的应用变得更加健壮。在用 C# 码代码的时候,别无二选的当然就是 Apache 的 Log4Net 。出乎我意料的是,Python 提供的日志功能更加方便,也更加容易上手,可以说是 SOC(关注点分离,Separation of concerns)的一个典范了。至于 logging 的具体设计规范,可以参考 PEP282

logging 模块是 Python 提供的标准日志模块,它的优势在于:

  1. 对多线程支持
  2. 通过不同级别对日志进行分类
  3. 灵活性和可配置性
  4. 将如何记录日志与记录什么内容分离
阅读全文 »

译者:写在前面

之前也为一些社区参与过翻译工作,我那时候翻译的大部分都是关于前端的内容,感觉国内前端的社区还是比 Python 的社区活跃不少。现在 Python 借着人工智能的东风开始流行起来,我个人也乐于看到 Python 被更多的开发者乃至企业所接受(好的一面,坏的一面嘛大家也会感受到也不说了)。本人的翻译,力求结合国内计算机技术的实际达到让读者容易理解和接受,不过实力有限,提高也不是一朝一夕的事情,各位有缘能读到我的翻译,请不吝指教,相互交流。

原文地址 ,这也是我拜读《流畅的Python》所获知的,这本书的确是目前市面上进阶的好教材。

阅读全文 »

前一段时间刚好用到了 Python 去直连数据库做一些数据分析的操作,习惯了 ORM 之后 SQL 语句也丢下比较长的时间了,好一会才想起来 SQL 注入这一回事。之前学习 Python 的时候也没额外留意这一个点(也有可能是我忘记其实有这个知识点),原以为可能要我自己去实现这一套玩意了。但是 Python 的哲学里面有这么一条 Although never is often better than *right* now. 格言,就先花点时间去搜一下,果然发现了在 DB API 2.0 已经有解决方案。

阅读全文 »

最后这部分,是关于 WSGI 一些在实现上的说明,用于给那些要支持 WSGI 标准的服务器程序或框架的实现提供指导意见,包括 服务器端扩展 API应用程序端的配置URL重写 以及 文件处理。这部分的翻译省略了 Supporting Older (<2.2) Versions of Python 一节,毕竟目前对于 Python 2.2 之前版本的使用可以说是九牛一毛了(而且 WSGI 标准本身就要求 Python 2.2 版本以上),有兴趣或者需要的读者可以自行参阅。对于 PEP3333 规范的解读告一段落,不过 WSGI 的解读还有下文,到时候可能会在 http.server 中穿插探讨。

阅读全文 »

这一部分主要是 WSGI 规范中的细节部分,涉及主要的方法(start_response 等)和对象(application_object 等),以及它们之间是如何交互,调用顺序如何,同时该遵守哪些约束,它们又是如何组合来实现 HTTP 协议的功能的。

阅读全文 »

这一部分主要是关于 WSGI 规范的概述部分。在这里我们会提到 WSGI 主要的三个组成部分:服务器端(网关侧)、应用程序端(框架侧)以及中间件,同时还有官网提供的这三个部分的示例实现。

阅读全文 »

译者的话

PEP3333 的前身是一个重要的规范 PEP333,一个关于 WSGI 标准的规范,现代 Python 的 Web 开发的深入几乎都不可能绕开这一个标准。译者当初接触到类似的一个概念是 ASP.NET Web API v2 中提出来的 OWIN。两者的定义和概念都有不少的相似之处,但背景却是大不相同:Python 是为了解决当时五花八门的服务器以及 Web 框架之间耦合度强导致的各种不兼容问题;而 .NET 提出这个是为了给开源铺路,摆脱 ASP.NET 对于 IIS 的强依赖性。不过殊途同归,标准的提出,都是为了方便真正的使用者:Web 开发人员。

本文是一篇译文,鉴于本人略捉急的英语水平,思考再三还是觉得把我的翻译放出来,一来是可以方便查阅,另一方面也希望点进来的各位可以提出修改的意见。

阅读全文 »

使用 Python 来做一些运维类的脚本工作的时候,少不了要读取命令行参数来控制脚本的工作逻辑。一般情况下我们直接的使用 sys 模块的 sys.argv 就可以得到命令行参数的列表(其中 sys.argv[0] 是脚本名)。

但是用 sys 不好的地方在于不够灵活,对于多个参数只能依顺序传入,可以说是严格按照 位置 来确定参数的。当然啦如果是配合管道或者 xargs 使用其实也很合适,但没有办法按照 命名 来指定参数确实比较原始。

这里所说的命令行的命名参数形如 -o output.txt,其中 -o 是命名参数中的命名(也可以理解为指定),output.txt 是命名参数中的参数(这个不一定需要)。

Python 在标准库中也包含了两个相关的库 getopt 以及 argparseoptparse 在 2.7 后已经被弃用),但是基本上找到的说明都比较模糊,用法不太明确,所以在这里简单 mark 下自己过去的用法以备查看。

阅读全文 »

Python 并发编程笔记的第二篇长文,主要重点在于解释进程和线程之间的关系与区别,另外还会涉及到 Python 的多进程、多线程编程以及协程在网络编程中的应用。

阅读全文 »