Python论坛  - 讨论区

标题:[python-chinese] 我翻译的小文:《Django是如何处理请求的》

2005年08月16日 星期二 15:50

TianLiangLe alang.yl at gmail.com
Tue Aug 16 15:50:00 HKT 2005

原文出处:
http://simon.incutio.com/archive/2005/08/15/request
希望对大家理解Django有所帮助

Django是如何处理请求的
 
我已决定开始为Django写一些软件架构方面的文章,描述核心的request处理机制是如何工作的。我要谈的Django的这一部分,是从浏览器得到 
一个request,把它转给一个response。我将不会讨论那些单独的组件:模板系统,O/R map,或者自动化的管理界面(admin 
interface);实际上,构建一个Django应用你并不需要它们。

当Django收到一个request后,它做的第一件事是创建一个HttpRequest对象(原文此处有误,应为HttpResponse对象)(或 
者它的子类)去表示这个请求。如何用不同的代码去区别处理,依赖于host的环境,依赖于Django是运行于mod_python或者WSGI下面。这 
个HttpResponse对象是一个抽象类,能让Django工作于不同的主机环境下面。

一旦这个对象被创建,Django开始URL解析。这是个由request中的URL来决定由哪一个view 
functions去创建一个response的过程。一个最小的Django应用,简单到只有一个或者几个view 
functions,和一个用来把这些functions映射到URL上的配置文件。

当URL已经被解析到一个view上后,这个视图函数被调用,请求的对像将作为第一个参数。其它的几个关键参数也可能被传递,这依赖于URL的配置。细节请请参看URL相关的文档。
视图函数(view 
function)作了大部分的工作:数据的查询,模板的load,HTML的生成,一个封装了结果的HttpResponse对象的创建等。这个视图函 
数返回一个对像,该对象传回到环境相关的代码,该代码将这个对象作为一个http应答传回到浏览器。

这是一个优美流畅的过程。但是我跳过了许多重要的细节:异常处理和中间件。视图函数不用返回一个HttpResponse,它可以用一个引发的异常来代 
替,比如常见的Http404(文件不存在)和Http500(服务器错误)。在开发服务器上,这些异常将被格式化并且回传到浏览器,在产品模式时,它们 
将被悄悄的记录在日志上,显示出来的则是友好的错误信息。

中间件比较有趣。Django提供三个hook,位于中间件类可以插入的次序上层,这些中间件类被定义在站点的配置文件里。有三种中间件类型:请求,视图和应答(尽管一个中间件类可以应用于多个hook上)。
请求中间件,运行于HttpRequest对象创建之后,URL解析之前,它允许对请求作一定的修改,或者在余下的应用有机会运行之前返回一个它自己的应答。

视图中间件的运行时间,是在URL解析器被用来决定使用哪个视图之后,但在这个视图被运行之前。它被当作一个回调函数传递,让它在视图被执行之前和之后做一些操作。换句话说,它完全可以阻止视图的运行。
应答中间件最后运行。在一个应答对象被创建之后,但在它被回传给客户端之前。它有能力对HttpResponse对象作最后的修改;举例来说,它可以从HTML中删除不必要的空格,或者进行gzip压缩。

上面说的这些东西的代码可以在ModPythonHandler类的__call__方法和BaseHandler类的get_response方法中找 
到。示例的中间件类可以在中间件的目录下面找到。由于Django还不是一个1.0 release版,上面的那些东西都可能会被修改。
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050816/b2c09b85/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月16日 星期二 16:24

Zoom Quiet zoom.quiet at gmail.com
Tue Aug 16 16:24:51 HKT 2005

在 05-8-16,TianLiangLe<alang.yl at gmail.com> 写道:
> 原文出处:
>  http://simon.incutio.com/archive/2005/08/15/request
>  希望对大家理解Django有所帮助
Great! 收录!http://wiki.woodpecker.org.cn/moin/DjanGo

-- 
[Time is unimportant, only life important!]

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月16日 星期二 17:00

limodou limodou at gmail.com
Tue Aug 16 17:00:52 HKT 2005

在 05-8-16,Zoom Quiet<zoom.quiet at gmail.com> 写道:
> 在 05-8-16,TianLiangLe<alang.yl at gmail.com> 写道:
> > 原文出处:
> >  http://simon.incutio.com/archive/2005/08/15/request
> >  希望对大家理解Django有所帮助
> Great! 收录!http://wiki.woodpecker.org.cn/moin/DjanGo
> 
不错。

-- 
I like python! 
My Donews Blog: http://www.donews.net/limodou

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月16日 星期二 21:07

TianLiangLe alang.yl at gmail.com
Tue Aug 16 21:07:22 HKT 2005

这篇文章讲得不深,还是多看看代码吧。
我一看到就开始翻译,完事后自己看了看,其实没多大用处。
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050816/038396a6/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号