代码改变世界

Django 源码小剖: 应用程序入口 WSGIHandler

2013-09-11 22:32 by 捣乱小子, 5983 阅读, 1 推荐, 收藏, 编辑
摘要:WSGI 有三个部分, 分别为服务器(server), 应用程序(application) 和中间件(middleware). 已经知道, 服务器方面会调用应用程序来处理请求, 在应用程序中有真正的处理逻辑, 在这里面几乎可以做任何事情, 其中的中间件就会在里面展开.Django 中的应用程序任何的 WSGI 应用程序, 都必须是一个start_response(status, response_headers, exc_info=None) 形式的函数或者定义了 __call__ 的类.而django.core.handlers 就用后一种方式实现了应用程序: WSGIHandler. 在这 阅读全文

Django 源码小剖: Django 中的 WSGI

2013-09-06 22:31 by 捣乱小子, 6030 阅读, 2 推荐, 收藏, 编辑
摘要:Django 其内部已经自带了一个方便本地测试的小服务器, 所以在刚开始学习 Django 的时候并不需搭建 apache 或者 nginx 服务器.Django 自带的服务器基于 python wsgiref 模块实现的, 其百分之七八十的代码都是 wsgiref 中的代码, 只重写了一部分, 所以 Django 自带的服务器测试写个 helloworld 就好了.Django 内置服务器在 django.core.servers 和 django.core.handlers, 这两者共同来实现.先看看 django.core.servers. 下面是目录结构:E:\DECODE-DJANG 阅读全文

Django 源码小剖: 初探 WSGI

2013-09-04 18:59 by 捣乱小子, 5981 阅读, 3 推荐, 收藏, 编辑
摘要:python 作为一种脚本语言, 已经逐渐大量用于 web 后台开发中, 而基于 python 的 web 应用程序框架也越来越多, Bottle, Django, Flask 等等.在一个 HTTP 请求到达服务器时, 服务器接收并调用 web 应用程序解析请求, 产生响应数据并返回给服务器. 这里涉及了两个方面的东西: 服务器(server)和应用程序(application). 势必要有一个合约要求服务器和应用程序都去遵守, 如此按照此合约开发的无论是服务器还是应用程序都会具有较大的普遍性. 而这就好像在计算机通信的早期, 各大公司都有属于自己的通信协议, 如此只会让市场杂乱无章, 宁愿 阅读全文

urllib2 源码小剖

2013-08-25 23:38 by 捣乱小子, 2470 阅读, 3 推荐, 收藏, 编辑
摘要:两篇小剖已经完成:urllib 源码小剖urllib2 源码小剖urllib2 对 urllib 改进了好些,整个思路都改了,变得更加灵活,有“高内聚,低耦合”的味道。看看 urllib2 的新特性:将对 url 的处理单独成一个 request 类URLopener 和 FancyURLopener 都下架,取而代之的是 OpenerDirector另添加了 N 多 handlers,这些 handlers 主要对 HTTP 连接,HTTP request 或者 HTTP response 的处理,譬如往 HTTP request 中添加几个特定的 cookies 或者状态码处理,所有你能想 阅读全文

urllib 源码小剖

2013-08-25 11:49 by 捣乱小子, 1737 阅读, 0 推荐, 收藏, 编辑
摘要:两篇小剖已经完成:urllib 源码小剖urllib2 源码小剖urllib 是 python 内置的网络爬虫模块,如果熟悉 python 一定能很快上手使用 urllib。写这篇文章的目的是因为用到了它,但因为用的次数较多,又或者是具体的需求,有必要深入去理解内部的工作方式。最简单的使用urllib 最简单的使用,我也从下面的语句中开始:import urllibparams = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})f = urllib.urlopen("http:/ 阅读全文

两种高性能 I/O 设计模式 Reactor 和 Proactor

2013-08-22 15:10 by 捣乱小子, 25817 阅读, 7 推荐, 收藏, 编辑
摘要:Reactor 和 Proactor 是基于事件驱动,在网络编程中经常用到两种设计模式。曾经在一个项目中用到了网络库 libevent,也学习了一段时间,其内部实现所用到的就是 Reactor,所知道的还有 ACE;Proactor 模式的库有 Boost.Asio,ACE,暂时没有用过。但我也翻阅了一些文档,理解了它的实现方法。下面是我在学习这两种设计模式过程的笔记。ReactorReactor,即反应堆。Reactor 的一般工作过程是首先在 Reactor中注册(Reactor)感兴趣事件,并在注册时候指定某个已定义的回调函数(callback);当客户端发送请求时,在 Reactor中 阅读全文

程序处理已排序数据为什么比未排序的快?

2013-08-18 09:23 by 捣乱小子, 1303 阅读, 0 推荐, 收藏, 编辑
摘要:sof 上的帖子,原文链接:Why is processing a sorted array faster than an unsorted array?.在RabbitOverCarrot有更多的内容。下面是翻译正文:问题描述:下面的 C++ 代码,执行结果很诡异。不知道为什么,已排序的数据居然能神奇的让这段代码的执行速度提升六倍之多:#include #include #include int main(){ // Generate data const unsigned arraySize = 32768; int data[arraySize]; for (un... 阅读全文

前向代理和反向代理

2013-08-04 17:27 by 捣乱小子, 3978 阅读, 4 推荐, 收藏, 编辑
摘要:第一次接触代理是在大二计算机网络课堂中,通由代理服务器可以让网络访问更具伸缩性,可以拒绝访问某些网站和协助访问被和谐的网站。最近无意中接触了反向代理,有对比正好有机会可以搞清楚前向代理和反向代理着两个概念。前向代理一般提到的是前向代理。表面上客户端 C 可以直接访问服务器 S,但实际上 C 在访问 S 的时候经过了中间的另一个中间的服务器 M,M就是代理服务器。为什么说是前向代理?因为前向代理是面向客户端的,而不是服务器。M 接收了 C 的请求后,(有选择的)对请求进行简化或者其他处理,再向目标服务器请求数据。C-------------M-------------S前向代理对请求进行简化或者 阅读全文

CSRF 攻击

2013-07-24 18:15 by 捣乱小子, 1396 阅读, 1 推荐, 收藏, 编辑
摘要:在 Django 的表单中硬性添加{% csrf_token %}标记如下,否则在提交表单的时候会出错,目的就是为了防止 CSRF 攻击: 。。。。。。Forbidden (403)CSRF verification failed. Request aborted.CSRF 全称是Cross-site request forgery,即跨站点请求伪造。当恶意的网站被访问时,会产生伪造的请求发送给服务器,伪造请求中可能存留了用户的 cookie,服务器也无法区分请求真伪,因此数据被提交甚至修改,给用户带来损失。小明如果遭受 CSRF 攻击严重的有如下现象,情景假设:小明早上起来登录了 shopp 阅读全文

最长回文子串(Longest Palindromic Substring)

2013-07-05 15:39 by 捣乱小子, 13084 阅读, 4 推荐, 收藏, 编辑
摘要:一个「对称」的序列,就可称为回文序列,譬如:aba,abba 等。详细介绍参看:http://zh.wikipedia.org/wiki/%E5%9B%9E%E6%96%87%E6%95%B0最长回文子串问题是要求在给出的一个序列中,找到最长的回文字串。譬如:一个序列 cabccba,它的最长回文子串是 abccba。暴力暴力穷举可以解决问题。三个循环穷举所有可能的序列。for i in range(0,len(str)) for j in range(i,len(str) is_palindromic_number(i,j)//这里有个循环但算法的复杂度是... 阅读全文

C 语言实现 C++ 多态

2013-05-09 17:57 by 捣乱小子, 1969 阅读, 2 推荐, 收藏, 编辑
摘要:C 还是 C++?C++ 中的多态是指「通过基类对象的指针或者基类对象的引用调用虚函数」,表现更多派生类的特性,但根据 C++ 多态的实现,我们发现这种方法存在一定的空间和效率的折损。不可否认,多态轻松解决了很多工程中遇到的问题,这与 pure C 的解决方法比起来,更为优雅。在考虑移植性上,C 的光芒要盖过 C++,但 C++ 的多态是可借鉴的,于是用 pure C 来模仿 C++ 中多态行为。C 如何实现多态在 C 中没有类的概念,但有 struct,而且 C 中的 struct 是不允许有函数的,只允许存在变量,那是不是函数变量就允许存在了?!所以,函数指针可以给我们一些提示。假定有一个 阅读全文

面试题:把负数移动到正数之前,不能改变正负数原先的次序

2013-05-03 14:58 by 捣乱小子, 2560 阅读, 1 推荐, 收藏, 编辑
摘要:如:-5,7,1,9,-12,15 变成 -5,-12,7,1,9,15。如何解?题目要求:空间复杂度O(1),时间复杂度O(N),排序稳定。空间上只能利用循环变量,标记变量等;时间上可以说是过一遍数组就完事了。分治用分治可以解决问题:首先把规模为 N 的问题划分成两个规模近似为 N/2 的子问题,两个子问题得到解决后进行合并得到整个问题的答案。对于本篇的问题,主要考虑合并该怎么解决,也就是假设:将数组 arr 分成 arr1 和 arr2。设 arr1 为 [----++++],arr2 为 [------+++],如何得到 arr 为 [----------+++++++]。显然,只要将 阅读全文

C++ 多态实现机制

2013-04-25 16:00 by 捣乱小子, 3543 阅读, 9 推荐, 收藏, 编辑
摘要:本篇从 C++ 初学者遇到的一个有趣的问题开始。有趣的问题考虑下面的 C++ 程序:class A{ void func(){}};class B:public A{ void func(){}};int main(void){ cout func();}输出结果是:class B'sfunc.多态就是多种状态,一个事物可能有多种表现形式,譬如动物,有十二生肖甚至更多的表现形式。当基类里实现了某个虚函数,但派生类没有实现,那么类 B 的实例里的虚函数表中放置的就是 &A::func。此外,派生类也实现了虚函数,那么类 B 实例里的虚函数表中放置的就是 B::func。... 阅读全文

【译】Simple MySQL ORM for C

2013-03-22 12:54 by 捣乱小子, 2179 阅读, 0 推荐, 收藏, 编辑
摘要:原文链接:http://daoluan.net/blog/?p=1613一直不知道有ORM这种东西,直到和 @海坡 交流后才接触。在项目中,需要将数据存储到数据库中,首先想到的是生成各种raw SQL的解决方法。但随着项目的进展,发现它很不灵活。譬如可能因为有新的需求,在数据库student表中添加dept_no字段,那在各种raw SQ中就需要进行修改了,工程浩大。如果操作(插入\修改\删除)数据库表中的数据,和操作数据对象一样,可以简化很多的操作,便于数据层的变更,而不必修改逻辑层代码。//项目随手摘录的一个构造插入指定对象数据的INSERT语句的方法。int gtd_genInsertS 阅读全文

数据结构利器之私房STL(下)

2012-12-08 23:24 by 捣乱小子, 1521 阅读, 2 推荐, 收藏, 编辑
摘要:索引数据结构利器之私房STL(上)数据结构利器之私房STL(中)数据结构利器之私房STL(下)这篇文章http://www.cnblogs.com/daoluanxiaozi/archive/2012/12/02/confidential-stl.html由于严重违反了『博客园首页』的相关规则,因此笔者改将《私房STL》系列的每一篇都整合到博客园中,取消外链的做法。另,考虑篇幅的问题,此系列文章将分为上、中、下。此篇为《数据结构利器之私房STL(下)》,最后一篇。喜欢就顶下:-)此系列的文章适合初学有意剖析STL和欲复习STL的同学们。私房STL之左值和右值私房STL之函数对象私房STL之函数 阅读全文