Wednesday, 28 July 2010

Behind the Wizard (Cherokee + Django)

前一篇中,介绍了如何在Cherokee Web Server中,通过其内置的Django Wizard,整合Django项目。在建立了一个虚拟路径之后,就马上能够提供Django项目的Web服务了。

Ubuntu 10.04-2010-07-26-13-04-11 这个Wizard做了哪些事情呢?

1. Rule

Ubuntu 10.04-2010-07-28-09-32-55虚拟路径/firstonez,是一个关于路径的规则。所有对/firstonez的访问,都要应用此规则。

2. Handler

Ubuntu 10.04-2010-07-28-09-38-37 于此规则相对应的Handler,采用SCGI方式。即Cherokee Web Server通过SCGI协议,将对/firstonez的访问,转移给Django项目。具体的SCGI设置如下:

Ubuntu 10.04-2010-07-28-09-44-38 这里定义了SCGI所连接的信息源头(Information Sources),Django Wizard自动建立了一个名为“Django 11”的信息源,其对应的地址和端口为:127.0.0.1:43095。这里的端口号,是随机选取的空余端口。

3. Information Source

接下来,看看这个Information Source包含了哪些内容。

Ubuntu 10.04-2010-07-28-09-51-28“ Django 11”这个信息源,是在本机(localhost)运行的一个解析器。连接参数127.0.0.1:43095。解析器命令为:python /var/www/firstonez/manage.py runfcgiocol=scgi host=127.0.0.1 port=43095

4. Running

前一篇可以知道,在完成上述设置之后,就可以直接访问到Django项目页面。并没有预先,以SCGI方式启动Django项目。通过Port Scan的检查可以知道,在访问http://127.0.0.1/firstonez之前,端口43095并没有打开;一旦访问了这个URL之后,端口43095就“自动”打开了。为什么呢?

Cherokee Web Server,在企图转移访问到Information Source的时候,发现相应的端口未打开,会主动调用解析器启动命令,开启Django服务。也就是说,如果没有访问,Django项目就不会启动,端口也不会被打开。这样,就不需要在系统里,准备Django项目的启动脚本。Cherokee Web Server自己处理这一切。当然,看上去,Cherokee可以启动,但不能停止Django项目的运行。

5. Django Project

前一篇中,是在/var/www下,通过sudo方式,建立的一个新的Django项目。在生产环境中,这个往往是不现实的。其实也是没有必要的,完全可以在自己的home里面或是其他地方,建立自己的Django项目。

同时,在用Django Wizard建立虚拟路径的时候,虚拟路径(Web Directory)也不必和Django项目名称一样。

Monday, 26 July 2010

Serve the Django Project by Cherokee Web Server in Ubuntu

myhat123念了无数次Django,我一直没有去碰Django。刚好前日在VMWare里面,安装Ubuntu 10.04 LTS,顺便安装了下Django,算是给myhat123一个交代。

Cherokee Web Server,我以前只是偶有耳闻,也是没摸过。呵呵,也顺路一起了。

1. Installation of Django and Cherokee

Ubuntu里面,安装软件很省心。在Synaptic Package Manage里面,选择软件包:cherokee,python-django和python-flup,然后“Apply”安装。

当前安装的Cherokee版本是0.99.39-4.1,Django版本为1.1.1-2ubuntu1。

安装之后,Cherokee Web Server就已经开始运行了。系统也已经为建立Django项目作好准备。

2. First project of Django

打开一个终端窗口,跳转到“/ver/www”目录下,建立一个Django项目:

bigonez@ubuntu:~$ cd /var/www
bigonez@ubuntu:/var/www$ sudo django-admin startproject firstonez
bigonez@ubuntu:/var/www$ ls firstonez/
__init__.py manage.py settings.py urls.py

这样,就有了第一个Django项目,firstonez。

3. Configurate in Cherokee

接下来,需要配置Cherokee,使其服务新建的Django项目。在终端中,输入命令启动Cherokee管理器。

Ubuntu 10.04-2010-07-26-12-27-27

注意,这里的密码是一次性、临时使用的。下次再启动Cherokee管理器的时候,会换新的。Cherokee提供的是Web页面式的管理器,其端口为localhost:9090

在浏览器中输入localhost:9090,进入Cherokee管理器。

Ubuntu 10.04-2010-07-26-12-47-25

点击Virtual Servers,

Ubuntu 10.04-2010-07-26-12-53-00

进入缺省(Default) Virtual Server,

Ubuntu 10.04-2010-07-26-12-56-48

点击列表底部的Wizards,

Ubuntu 10.04-2010-07-26-13-04-11

在Wizards列表中,选择Category - Platforms,点击Wizard - Django后面的“Run Wizard”。

Ubuntu 10.04-2010-07-26-13-13-18

在Django Wizard中,输入Web路径名(/firstonez)和项目的实际路径(/var/www/firstonez)。

Ubuntu 10.04-2010-07-26-13-19-27

现在,/firstonez出现在列表中了。点击左边菜单下方的“Save Changes”中的“Save”,保存修改的Cherokee配置,重新启动Cherokee Web Server。

4. Access to the Django project

现在在浏览器中,输入http://localhost/firstonez,访问前面所建立的Django项目页面,如果看到这样的页面,那就是成功了。

Ubuntu 10.04-2010-07-26-13-36-13

呵呵,真够简单的。不是吗?

Monday, 19 July 2010

Work with JSON Data in Firefox

JSON (JavaScript Object Notation),作为轻量级的数据交换格式,被越来越广泛地应用在Web Application中。这里讨论的是,如何在Firefox里,有效、方便地和JSON数据打交道。

1. JSON (JavaScript Object Notation) Regular Format

JSON数据在使用上,是非常简单易用的。很多语言都提供了JSON数据的编码和解码函数。比如在PHP程序中,可以这样来输出JSON格式的数据。

   1: <?php

   2:     // data initial
   3:     $myData = array();
   4:  
   5:     // data update
   6:     $myData = ...;
   7:  
   8:     // JSON data encode and export
   9:     echo json_encode( $myData );
  10: ?>

在实际使用过程中,这样的处理方式已经能够使程序正常地运行了。

但是,这样输出的JSON数据并没有严格遵从JSON的标准定义格式。在PHP里面,缺省情况下,PHP程序输出的内容,其媒体类型(Internet media type)是“text/html”。然而,JSON真正定义的媒体类型应该是“application/json”。因此,JSON数据严格的使用方法应该是:

   1: <?php
   2:     ...
   3:  
   4:     // JSON data encode and export
   5:     header("Content-type: application/json");
   6:     echo json_encode( $myData );
   7: ?>

JSON数据本身是一样的,但输出的数据报文的头会有所区别。采用严格格式的JSON数据输出,当然还是有用的。它使得我们在Firefox里面,能够结构化显示JSON数据,提高应用开发的效率。

2. JSONView

JSONView,是Firefox里的一个插件。它的作用,处理“application/json”类型的数据,高亮、结构化显示JSON数据。此插件只对“application/json”类型的数据有效。在安装此插件之后,Firefox一旦发现此类数据,会自动调用JSONView显示。这里是,JSONView的显示例子。

JSONView Example

3. Firebug

使用Firefox,开发Web应用程序的,对Firebug应该非常熟悉。Firebug从版本1.4a11开始,就提供了对JSON数据的支持。这种支持的前提条件,也是JSON数据必须标记为“application/json”媒体类型。

Firebug中,显示上述JSON数据,如下:

Firbug Example

注意,Firebug显示的数据顺序,是排序过的,不是原始的JSON数据字段顺序。

通常,JSONView可以用来进行Web Service的初期调试,检查输出的JSON数据是否正常;Firebug则用于AJAX通讯模式下的,JSON数据测试。

Firebug中,对返回的Response数据块,是有限制的。当数据块的大小超过100k之后,Response表单就将超过部分,省略了。当然,JSON表单里显示出来的,还是列出了全部的数据,并没有省略。

JSONView,无法直接用于显示AJAX通讯过程的JSON数据。这需要在Firebug的Response表单中,从点击右键所弹出的菜单中,选择“Open Response in New Tab”。这样,AJAX过程中的数据,就在新的页面里看,用JSONView显示出来。

firbug 2 jsonview

此选项,会把收集到的数据,直接调用JSONView显示,不会发生额外的再次通讯。相对应的,“Open in New Tab”选项,则是把AJAX的URL在新的页面打开。相应的,还要再次访问该URL,才能获取数据显示。