Posts tagged ‘python’

Django系列谈(二)

下面开始快速搭建Django 测试服务器(我们需要的是内建的测试服务器,而不需要apache之类的服务器软件)。从一穷二白开始,假设你用windows,步骤如下:

安装Python

http://www.python.org官网下载2.x版本,最新版本是3.x,不过用的人太少了,2.x版本深入人心,好比xp跟win7的关系。一般是下载msi安装文件,一路next,完毕。Python会被安装在c:\Python2x目录下,最好检查一下。

设置好环境变量

下面的步骤要直接用到python命令,所以先设置好环境变量(步骤不用我说了吧),比如我的是C:\Python25。然后用cmd打开命令窗口,直接打python命令来验证是否搞成功了。

安装Django

拿出你的svn(如果没有的话就看官方教程),checkout。注意到里面有个setup.py,这是很标准的python类库安装方式(没错,django是framework也是类库),你还会看到很多python类库有类似的安装方式。直接进入django根文件夹,然后在命令后窗口下执行

python setup.py install

如果前面的步骤正确的话,这里可以直接运行了。眼看黑窗口下哗哗地,没多少时间即可完成。那么django到底安装到哪儿了呢。其实它的位置在:C:\Python25\Lib\site-packages。简单的分析一下这个路径,大概可以猜到:Lib文件夹的内容是python类库(事实就是自带的标准类库),而site-packages文件夹的内容是外部添加的类库。

设置好环境变量

又要设置一回了。这次的路径是C:\Python25\Lib\site-packages\django\bin。因为下面就要用django来建立一个服务器实例。

建立一个服务器实例

前面的工作都是准备,这回来真的。我们需要用django类库来新建一个服务器实例。这里略微解释一下“服务器实例”:要知道之前安装的django只是一套类库,不能做任何事情,而现在做的是建立一个project来做一个服务器该做的事情,当然你还能新建好多服务器实例。如何建立,用上命令行:

python django-admin.py startproject local

这里的“local”可以替换成你想要的文件夹名字,而local就是你新服务器的根目录,打开这个目录你会看到有三个文件建立起来了:

  • __init__.py
  • manage.py
  • settings.py
  • urls.py

这又是一套非常标准的python包。

验证一下

可以运行测试服务器了。在新建的服务器根目录下执行命令行:

python manage.py runserver

然后打开浏览器键入url

http://127.0.0.1:8000

非常标准的django 欢迎页面出现。

Django系列谈(一)

Python是一种很优雅的语言。优雅这个字,在我理解是,用最少的话表达最多的意思,说白了就是开发效率。我觉得作为程序员应该会一种优雅的语言。在紧急或者懒惰的情况下,可以最快最高效的帮助完成一些任务。作为一个flashflex的coder,最头疼的莫过于,需要后台,至少说,需要一个测试用的后台。Python是搭建简易后台最有效率的技术之一。

这个“之一”一定要讲,不然容易造成论战。不错,除了python,有人还喜欢ruby,或者php。他们code的效率同样很高。争来争去是没有意义的,我感觉,与其耍嘴皮子,搞些有意义没意义的辩论,还不如关注你手上可以用的资源。如果你认定了Python,那么马上学习吧,拿起来就用吧,我们只是要测试用后台不是么,黑猫白猫,能抓老鼠就是好猫。邓爷爷的话一定要相信。

如果你惦记着纯用Python搭服务器,那你一定够傻了。要知道python可以做很多事情,能力很强的劣势就是,比较“底层”(当然跟C比较的话,编程效率高)。为什么不用framework呢。flash的开发效率同样比较低,所以才有flex冒出来。framework就是用来降低工作量的,就像很多所谓的牛人在给他们的产品做广告时说的那样,我们尽可能的让开发者关注业务,而不是实现。说的多好。

Django是很好很强大的web framework。它的好处是:

  • 自带一个测试服务器。可以免去IIS和apache。不需要安装额外的服务器软件。
  • 绝少的配置选项。
  • 自带一个简易的管理系统。可以管理数据库的增删改。
  • 依靠python解释执行的好处,做修改可避免服务器重启
  • 快速实现MVC

上面是虚的,实的嘛,下回分解。

用xlwt和xlrd读写Excel文档

工作中不可避免要整Excel文档,比如统计啦排版啦。python官网中有两套类库xlwt和xlrd,不被包含在默认的python类库一起发布,而需要用setup.py install方式来安装。这两套类库的名字比较有趣,拆开来可以看成excel write read,顾名思义是用来读写Excel表格的。但是好好的为什么要两套类库呢,我猜可能是Excel的存储方式很复杂吧,于是这两套类库一个只能读,一个只能写,如果你需要读了修改后再保存,便无能为力了。如果不需要这样的话,就请继续看介绍吧。

xlrd是用来读Excel文档,下载见这里。这里一个小例子:

import xlrd

fname = "201004.xls"
main_sheet = xlrd.open_workbook(fname).sheet_by_index(0)
the_value = main_sheet.cell_value(0, 0) ##read the cell (column 0 and row 0)

xlwt是用来写Excel文档(新建并保存),下载见这里。这里有一个小例子。

import xlwt

bkw = xlwt.Workbook(encoding='utf-8')
sheet = bkw.add_sheet('sheet_name')
sheet.write(0, 0, 'the_value', xlwt.Style.default_style)

这两套类库有比较详细的doc可供查询。值得一提的是,这两套类库是如此相像,但是却不能互用。比如要修改cell的样式(如字体,加粗等),需要使用XFObject,xlwt和xlrd都有定义但却不是一样的。xlwt定义的非常广泛(见Style.py文档)。

自写的简单Python Log类

只要定义一个write方法就行。之后随便输出到什么地方都可以。我写的就既可以写入标准输出,也可以输出到文件。用来调试程序挺有用的。版本2.5.2

    class Log():
        def __init__(self, filename):
            self.file = open(filename, 'wt')
            sys.stdout = self
 
        def write(self,data):
            self.file.write(data)
            self.file.flush()
            sys.__stdout__.write(data)
 
        def __del__(self):
            self.file.close()

python 3.0 final 终于发布

http://www.python.org/download/releases/3.0/

Python 3.0 (a.k.a. “Python 3000″ or “Py3k”) is a new version of the language that is incompatible with the 2.x line of releases. The language is mostly the same, but many details, especially how built-in objects like dictionaries and strings work, have changed considerably, and a lot of deprecated features have finally been removed. Also, the standard library has been reorganized in a few prominent places.

document online也变掉了,见http://docs.python.org/3.0/

还有不可不看的what’s new in python 3.0。很多built-in的内容都变化了。

NetBeans IDE for Python EA Download

今天netbeans 6.5正式版发布,netbeans兑现它的承诺,PHP首先从这个版本开始正式支持了。我不是做PHP的对这些本没什么兴奋,不过在下载页面的一个角落里发现NetBeans IDE for Python的下载链接,虽然只是一个Early Access,不过一个明显的信号就是,python有可能在下个netbeans版本被加入了。这是个不错的信号哦,python的很多强大的IDE都是要money的,真的非常希望netbeans能做出一个强大的python ide来,为开源事业再做贡献。

http://www.netbeans.org/features/python/index.html

Lua初尝试

Python,Lua和Ruby是当前动态语言三大当红小生,呵呵,在java,.net等巨头夹击下不容易啊。python是我一向喜欢的,ruby听说也差不多。今天有幸试了下Lua,感觉和它的两位兄弟不大一样。

  • 第一个感觉是小,windows下编译出来的lua库大概就100多k吧,200还不到,这样用来做嵌入式语言不错。当然功能是很简单的。不过我更喜欢用简洁这个词,简洁代表着可配置可扩展,是我喜欢的类型。
  • 第二感觉是跨平台,因为lua很小,那么即使放到手机里也是不错的。Lua正是一种可以移植到移动平台上的语言。
  • 第三点认识是快。我没开发过当然不知道是不是真的,官网这么讲的。

如果有兴趣可以去官网看看,目前Lua的资料很少。我照着programming in lua.pdf文章里的入门例子试了一下。

首先先去下载编译好的lua(当然也可以下source code自己编译,我用VS2008编译过,成功哦),然后用随便那个文本编译器写脚本(不要指望哪个IDE,Lua这么简单的玩意儿),我用的是Komodo Edit,呵呵,这里给Komodo做下广告,这玩意儿好啊,支持十几种语言(同时语法高亮,语法提示),出门在外必备品。下面是lua脚本内容:

-- define a factorial function
function fact(n)
    if n == 0 then
        return 1
    else
        return n*fact(n-1)
    end
end
 
print("enter a number:")
a = io.read("*number") -- read a number
print(fact(a))

然后和执行一下,和python差不多:lua5.1 myfirstlua_fact.lua。

运行结果

运行结果

minidom解析XML用起来和AS2差不多

python 自带了minidom库来解析xml,用起来还算比较简单,很像一个原始版的函数库。如果看一下python manual,minidom的脉路还是很清晰的,以Node(节点)为基本要素。基本上和AS2的解析方式差不多。minidom包含如下几种Node类别:

  • Node
  • NodeList
  • DocumentType
  • Document
  • Element
  • Attr
  • Comment
  • Text
  • ProcessingInstructure

貌似几乎涵盖了所有xml元素。其中Node是所有XML元素的基类。里面最最常用的就是Document,Element和Text了。

  • Document代表了xml文档,由一个很常用的属性叫documentElement,就是根节点,是一个Element对象。一般用parse解析xml文件,或者用parseString转换xml样式的字符串,来得到Document
  • Element代表一般节点,常用属性有tagName(节点名称)等。通常都是用遍历方式来获得子节点的。minidom有个比较恼人的地方就是它不能忽略注释和空白,所以在遍历的时候要注意查看nodeType(Node类的属性,节点类型,Element是1,Text是3),然后再去看tagName。
  • Text是文本节点。比如有一段xml:<p>paragraph</p>。它是一个Element,那么Element的子节点就是Text节点,如果要获得字符串就用data属性。按这个例子,获得字符串paragraph的方法是:Element.firstChild.data

minidom解析xml还算比较方便。俺也是刚入门。以后学多了继续写啊。

python 2.6 正式版发布

经过多次alpha和beta版本,python 2.6的正式版终于发布。新特性的论述见这里。这次业界的反映好像不够热烈,官方也说了,这是一个向 python 3.0的过渡版本,添加了一些3.0的新特性同时也保留和2.x系列的兼容。我个人非常期待3.0,据说这是一次大飞跃啊,而且和2.x不兼容。就如同as2到as3的升级。

试用Komodo Edit 4.4感受

Komodo系列不但大名鼎鼎,而且价格高高。不过幸好还有komodo edit版本是免费用的。最近由于上头需要也开始学php了,首先得找个编辑器不是。最有名的貌似是zend studio,不过它实在太大了,基于eclipse的我也不太喜欢。后来找着找着还是找到了komodo edit。

刚装上用了下python,嗯,感觉不错噢,代码提示,高亮,project管理都比较齐全,还支持十几种语言。可惜它毕竟只是edit,没有调试的。先将就着用吧。下载