Tairan's Story

「知之真切笃实处即是行,行之明觉精察处即是知,知行工夫不可离。」


快速建立HTTP Server共享文件

Python内置了一个简单的Web服务器可以用来建立一个HTTP Server来共享某个目录下的文件,尤其是在Unix-Like+windows的混合网络中更是方便快捷。

Server
假设 IP 为 192.168.1.1

首先进入到需要共享的目录,如

cd ~/share/
python -m SimpleHTTPServer 8000 #Python 2.6

OR

python -m http.server 8000 #Python 3.0

Client
访问http://192.168.1.1:8000就可以看到Server共享出来的文件了。

5 Comments » | Tags: | Categories: Technology, 我的声音
Don’t up-to-date

不要最新的!

貌似很多程序员都喜欢尝新,不停的追赶这语言那技术。此时之前,我也是其中的一份子,而且还比较狂热。这几天遇到的一些事情让我懂得,最新的不一定是最合适的。

说说是什么事情让我停止狂热的追赶最新的东西吧:
现在Python 3.0 已经发布一段时间了,并且大叔告诉我们现在还有很多周边软件没有跟上,所以除非是新项目,还是保守点选择2.6 比较合适。于是乎,就选择2.6.1吧
谁知 安装 trac 以及相关软件的时候,有个装不上,>_< 因为忘记记录存档想不起是哪个软件了,真对不起自己和大家!

再说说Apache吧,一直都选择2.2.x来玩,搭建SVN服务器等。CollabNet 做的集成包真的很好用,安装也简单!可用这个Apache2.2 安装 MOD_SCGI 却死活启动不了服务,从Google的结果来看,虽然有人提出自己编译MOD_SCGI for Apache 2.2,可也是意淫了一下说:“应该很容易”,– 谁不知道在Windows 上玩这些成本有多高!
无奈退而求其次,有换了个Apache2.0.x用用。

盲目的求新会走很多弯路不过也能获得一些经验! 兰迪教授说:当得不到想得到的东西时,就得到了经验。

虽说不要最新的,也没说一直守旧不前进,使用开源软件时最好用当前版本的前一个次版本最佳。 一来是软件经过了一段时间的考验,二是周边的软件也都跟上了。不至于走两步退一步。

===========================
Trac + Apache + SCGI 的安装方法比较容易,性能稳定方面自己倒是没有测试过。主要参考了这篇文章 Subversion无痛起步 — Trac 0.10b1 + Apache 2

No Comments » | Tags:,,, | Categories: Technology, Thinking, 我的声音
why webpy is instable?

有时脑袋有了idea,就想马上实现它。原本PHP是个不错的选择,可是自己以后的工作和规划中已经排除了它,取而代之的是Python。

用Python写一个简单的web application可不是那么容易的事情,以前玩了一段时间的Django,那时还不是1.0 Release版本。好不容易盼到Django 1.0 release了,却发现有很多东西不认识了。怎奈写一个小东东就这么难呢?

寻寻觅觅,忽见web.py是一个更简洁的framework,so, 看文档,做练习。从下班一直捣鼓到此时22:55,发现web.py这个framework中还是有很多Bug的。

官方释放版本是0.23,在cookbook中写到如何使用subapplication。
blog.py

import web
urls = (
  "", "reblog",
  "/(.*)", "blog"
)
 
class reblog:
    def GET(self): raise web.seeother('/')
 
class blog:
    def GET(self, path):
        return "blog " + path
 
app_blog = web.application(urls, locals())

这里有一个bug:
AttributeError: 'module' object has no attribute 'application'
Google以后才知道要用0.3版的才行,因为0.23版中根本就没有application.py这个文件

这个问题解决以后,在code.py中引用subapp

urls = (
    '/blog', blog.app_blog
)

又有一个bug:

AttributeError: 'module' object has no attribute 'app_blog'

痛苦阿,明天还要上班!暂时放一下web.py,让我在研究一下Django吧,好歹熟悉一些。如今的Django不仅很美,而且还很强壮,当然也很肥胖(相对)。

开源,路还很长。祝福web.py

1 Comment » | Tags: | Categories: Technology, 我的声音
Python中的lambda函数

Python支持一种有趣的语法,它允许你快速定义单行的最小函数。这些叫做lambda函数,是从Lisp借鉴来的,可以用在任何需要函数的地方。

  • 总的来说,lambda函数可以接收任意多个参数并且返回单个表达式的值。lambda函数不能包含命令,包含的表达式不能超过一个。不要试图向lambda函数中塞入太多的东西;如果你需要更复杂的东西,应该定义一个普通函数,然后想让它多长就多长。(当然,太长的函数也是不推荐的)
  • lambda函数是一种风格问题。不一定非要使用它们;任意能够使用它们的地方,都可以定义一个单独的普通函数来进行替换。一般将它们用在需要封装的特殊的,非重用代码上,避免令代码中充斥着大量的单行函数。

lambda示例

1 # 普通函数
2 def f(x):
3      return x*2
4
5 >>>f(3)
6 6
7
8 # lambda函数
9 func = lambda x: x*2
10 >>>func(3)
11 6
12 >>>(lambda x: x*2)(3)
13 6
No Comments » | Tags: | Categories: Technology, 我的声音
The note of learning Django

django 学习笔记

使用 apache2.2 + mod_python 部署django 项目

#装载模块
LoadModules python_module modules/mod_python.so

#声明虚拟主机
NameVirtualHost 127.0.0.1:80

#定义虚拟主机
<VirtualHost 127.0.0.1:80>
<Location />
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonDebug On
PythonPath “['D:workspace'] + sys.path”
</Location>
</VirtualHost>

SetEnv DJANGO_SETTINGS_MODULE mysite.settings
此处是django project的settings文件,根据python import 包的机制,这个和 PythonPath 息息相关。
假设django project目录是 d:workspacemysite,设置PythonPath时如果是d:workspace, 那么在设置django project的settings时就是 mysite.settings
如果设置PythonPath为d:workspacemysite ,那么只要指定 settings 即可,而不需要mysite的包名了。
此处还影响着 settings.py 文件中的 ROOT_URLCONF

#TODO使用虚拟目录部署

配置 Django project 中的静态资源 css js jpg 等

通过阅读他人的源码,把这个问题也明白了。传说 Django 不建议在 settings 设置 MEIDA_ROOT 等相关静态文件配置。那么我们在模板中如何使用这些文件呢。如,在模板中我们使用 /media/css/layout.css ,web server怎么样才能知道这个路径在什么地方呢?
当然,Django中提供了相应的解决办法:通过url映射。在urls.py中做一下设置
urlpatterns += patterns(”,
(r’^media/(?P<path>.*)$’, ‘django.views.static.serve’, {‘document_root’:'d:/templates/media’}),
)

通过这样的映射,静态的资源的问题就解决了。:)

Django URL dispatcher

1. project 级别的 url 调用 app 级别的url

此处要注意的是,project url + app url 才是真正的url,所以写url的正则表达式时,注意^ $两个符号

2. 通过Url传递Get Request参数

如果我们 detail(request, name) 的方法需要一个name参数,那么我们的正则表达式应该这样写 (r’^detail/P<?name>w+$’, ‘detail’)

3. 快捷调用 view
在appproject.views中有个index方法 在patterns 中第一个参数指定view后,在以后的调用只需指定方法名即可
urlpatterns = patterns(‘appproject.views’,
(r’^$’, ‘index’),
)

No Comments » | Tags:, | Categories: Technology, 我的声音


我的豆瓣

二维码快速链接
QR Code fuer diese Seite