本文自maxburstein.com翻译而来,文章原作者为Max Burstein, 已经作者授权翻译用于非商业用途。原文地址:http://maxburstein.com/blog/realtime-django-using-nodejs-and-socketio/

曾在项目中使用python非阻塞框架eventlet来实现过相似功能,这篇文章介绍了另外一种实现实时在线交互的方式。

我们今天的目标是使用Django, Node.js, Redis和Socket.IO创建一个实时在线聊天室。虽然使用其它技术也可以轻松创建类似于聊天室的应用, 本文将展示如何把无状态的REST app(关于REST概念, 请自行google之)变为实时交互的web app, 我将用Django来创建REST部分, 你也可以使用任何你熟悉的语言和web框架来代替,闲话少说, 代码先上,对了,在上代码之前,我们有以下东东需要安装。

安装 Django 1.4+ Redis 2.6.x (somewhat optional, but recommended) Redis-py …
安装 wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz tar zxvf webbench-1.5.tar.gz cd webbench-1.5 make && make install

如果出现下面错误:

ctags *.c /bin/sh: ctags: command not found

那么

yum install ctags

或者

wget http://nchc.dl.sourceforge.net/project/ctags/ctags/5.8/ctags-5.8.tar.gz tar zxvf ctags-5.8.tar.gz …
/media/photologue/photos/0910171529e9280d455b0a1260_s.jpg

到堂安的时正是日落时分,除了西藏札达,这是我见过最美丽的日落。

山脚下是著名的肇兴侗寨,车水马龙,灯红酒绿,游人如织。堂安在山顶上,没什么游客,很安静,跟挑着稻谷回家的村民打招呼。我们坐在田埂上张望,我对高铎说,你来肇兴开酒吧的话,我每年来一次,就来堂安,每天吃了睡,睡了吃,傍晚就坐在田埂上。

高铎他们说,搞一张,搞一张。

/media/photologue/photos/1010112311ae1a24c7cf292ff6_s.jpg

拜道路太泥泞所赐,车被堵在这里,才在锦屏县城不远处发现这么一个村子,正值傍晚,炊烟袅袅,有那么一点点世外的感觉。

这条江叫“亮江”。

 

 

有时候为了只让有权限的用户下载,不能直接把文件放在硬盘上以静态文件的方式直接提供下载,下面这段代码实现通过文件流的方式下载:

def download_android(request): your_file_path = '/xxx/xxx/' original_filename = 'xxx.xx' file_path = your_file_path + original_filename fp = open(file_path, 'rb') response = HttpResponse(fp.read()) fp.close() type, encoding = mimetypes.guess_type(original_filename) if type is None: …
本文自theprojectspot.com翻译而来,文章原作者为Lee Jacobson, 已经作者授权翻译用于非商业用途。原文地址:猛戳这里进入

如果你还没读过第一篇,先跑到这里去瞧一瞧,我保证你多花这么一点时间是值得的。

到目前为止,我们已经学会了用Node.js做一些基本的事(比如用来打印金光闪闪的Hello World), 接下来我们将去学习一下回调函数并了解为什么这玩意是如此的有用。

为什么是Node.js?

现在已经有很多编程语言,并且各有各的优缺点。能够对比不同编程技术,并选出最佳编程语言来解决问题,是创建一个可靠的产品的重要前提条件。跟所有别的编程语言一样,Node.js有它自身的优点和缺点,那么让我们来看一下应该在什么情况下使用Node.js吧。

优点:

a) Node.js用于解决高并发带来的瓶颈。比如你要创建一个需要短时间内处理成千上万的请求,那么Node.js无疑是一个很棒的选择。 b) 这就是JavaScript,这意味着任何有前端JavaScript编程经验的人都可以把以前的经验带到Node.js编程里来,并且它是基于Google的V8引擎,速度极快。 c) 如果你在客户端和服务器端同时使用JavaScript,这会让你的编程变得轻松和快速。比如:你如果要做一些校验,服务器端和客户端可以共用一样的代码。而前后端数据结构一致,数据传输时超容易。 d) 你会让那些做PHP的同志们惊讶得下巴掉下来。(这哥们黑PHP可真是不遗余力啊。)

光说好的也不行对吧,让我们来看一下不好的。

本文自theprojectspot.com翻译而来,文章原作者为Lee Jacobson, 已经作者授权翻译用于非商业用途。原文地址:猛戳这里进入 介绍

这是我的关于Node.js系列入门教程的第一篇。必须说明一下,我并不是Node.js的专家,但是尝试向别人解释这是怎么回事是自我学习的一个好方法。如果你发现有些地方并不是那么正确,请提出来让我知道以便修正,谢之。

最近Node.js如此流行,到处是讨论这个的话题,我决定一探究竟学学这玩意儿。软件行业技术更新如此之快,如果落在后面是很危险滴(汗,这哥们才20岁出头,就有这么强的落后于时代的危机感)。如果你不想落后于时代,不想失业,学习新的编程语言更新自己的技能是作为程序员非常重要的一件事情。如果你不能认真对待此事,想想那些菜鸟新程序员不能找到工作的悲惨境地吧。

好了,闲话少说,进入正题(铛铛铛铛)。

Node.js是一个服务器端JavaScript实现。这意味着所有Javascript的牛B特性都能在Node.js里得到支持,同样意味着如果你以前有JavaScript编程经验的话,你学习Node.js将占有极大的优势。Node.js刚出现没几年,哪怕是一直用这个东西工作的,也只是几年,对比C这些古老语言有这么多人在用,这玩意没多少人会,如果你会的话,比单纯php程序员的竞争力要提高不少吧?(作者观点,用php的同学不要在评论里骂我。。。)

开始Hello World吧

让我们来开始写第一个Hello Wrold程序,首先到http://www.nodejs.org 去下载并安装node.js。安装好之后,用你喜欢的文本编辑器创建一个JavaScript文件,内容如下:

console.log("Hello World");

保存为"hello.js" ,并且在终端里用如下命令运行程序:

node hello.js

现在你应该在终端里看到金光闪闪的“Hello World”两个大字了。如果只想看到这两个字,那么到这里就完了,不过我相信你更想看到在浏览器里怎么看到这两个字,好吧,打开你刚才创建的hello.js这个文件,重新编辑如下:

如果所有页面的post都不成功,在启动uWSGI命令里增加-b 8192参数。也就是当在日志里找到类似如下错误时:

invalid request block size: 6727 (max 4096)...skip Fri Apr 6 08:55:20 2012 - error parsing request

默认是不启动线程支持的,如果要支持,增加--enable-threads参数

首先,定义一个任务文件,取名为niubi.crontab,比如放在/srv/niubi/下面:

25 19 * * * cd /srv/niubi/ && /usr/local/bin/scrapy crawl niubi.com

在里面写入如上语句,指的是在每天19时25分,先跑到/srv/niubi/目录下,然后执行scrapy命令到niubi.com上抓些东西。

然后,

crontab /srv/niubi.crontab /etc/init.d/crond restart

查看有什么定时任务:

crontab -l

当然,在这之前,你要确保已经安装了crontab, CentOS的话如下:

yum install -y vixie-cron

因为这个博客里到目前为此大部分技术内容是关于python及django的,所以特别提醒下,如果要执行脚本,应该要用如下的语句:

25 …

好久没从头到尾在centos里配环境,记下以备忘。

1、升级python后,easy_install的目录发生改变,要修改路径:

$ mv /usr/bin/easy_install /usr/bin/easy_install.old $ cp /usr/local/bin/easy_install /usr/bin/

2、安装MySQL-python之前,先要安装mysql-devel

$ yum install mysql-devel $ easy_install MySQL-python

3、关于scrapy那点事,先要装lxml这一堆:

$yum install libxml2 $yum install …

如果你愿意,你可以自己下载源码编译安装nginx,这里提供用yum安装的方法。

默认的yum源比较老也不全,在update这的那的之后,还是没有nginx的身影, 别折腾了, 标准包是没有这玩意儿的。

wget http://www.atomicorp.com/installers/atomic #下载atomic yum源 sh ./atomic #安装 yum check-update #更新yum软件包

2、安装nginx:

yum install nginx #安装nginx,根据提示,输入Y安装即可成功安装 #修改配置文件,这里省略,主要是将目录指定到 /home/ngmsw-files service nginx start #启动 chkconfig …

如果已经安装python-dev和libxml,在开发环境OS X和ubuntu上安装scrapy非常简单:sudo esay_install scarpy。

但在CentOS5.8上安装碰到了一点小麻烦。

[root@localhost ~]# easy_install scrapy Searching for scrapy Best match: Scrapy 0.16.1 Processing Scrapy-0.16.1-py2.7.egg Scrapy 0.16.1 is already the active version in easy-install.pth Installing …

不能使用easy_install或yum在CentOS 5+里安装PIL,会缺胳膊少腿。

需要进行源码安装,并修改setup.py进行配置。

 

#这个地址较快,如果哪天访问不了了,换官方的 wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz tar xvfz Imaging-1.1.7.tar.gz python setup.py build_ext -i

修改setup.py:

TCL_ROOT = "/usr/lib64/" JPEG_ROOT = "/usr/lib64/" ZLIB_ROOT = "/usr/lib64/" TIFF_ROOT = "/usr/lib64/" FREETYPE_ROOT …

第一步,先安装Oracle客户端,结合你的情况自己找合适的版本,我下载的是 oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm 下载地址 rpm -ivh oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm

第二步,找出你的ORACLE_HOME,我安装之后在这里:/usr/lib/oracle/11.2/client64/lib/

第三步,下载oracle-instantclient11.2-sdk-11.2.0.1.0-1.x86_64.zip 下载地址。解压,把里面那个叫sdk的文件夹复制到 /usr/lib/oracle/11.2/client64/lib/

第四步,做一个软链: $ cd /usr/lib/oracle/11.2/client64/lib/ $ ln -s libclntsh.so.11.1 libclntsh.so

第五步,安装cx_Oracle: $ export ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib $ export …

到你的数据库中,表django_site,把你的默认站点的id改为1,或者到settings.py里把SITE_ID修改为你django_site里那个站点的id,done。

原文地址:http://programmerdigest.cn/2012/03/1190.html

第一步、下载安装cx_Oracle

从sourceforge.net下载cx_Oracle的rmp安装文件,注意下载版本最好和Oracle、Python环境保持一致,我当前的环境是Oracle 11g和Python2.7,因此下载的是cx_Oracle-5.1.1-11g-py27-1.x86_64rpm。

下载地址:http://sourceforge.net/projects/cx-oracle/files/5.1.2/

不用按RPM方式去安装,直接解压从中取出cx_Oracle.so文件(只需要这个),复制到Python环境的dist-packages目录,我的机器是/usr/local/lib/python2.7/dist-packages/

第二步、下载安装Oracle instant client

下载地址http://www.oracle.com/technetwork/indexes/downloads/index.html,从Database栏目的Instant Client链接进入,按当前系统选择对应的下载,我选择的是Instant Client for Linux x86

解压下载文件oracle-instantclient11.2-basic-11.2.0.3.0-1.i386.rpm,路径很长实际上只需要其中的so共享库文件,将所有so文件复制到一个单独路径即可,我将他们复制到/opt/oracle-instantclient11.2/lib。

应该有5个文件: laonan@parallels-Parallels-Virtual-Platform:/opt/oracle-instantclient11.2/lib$ ls libclntsh.so.11.1 libnnz11.so …

在上一篇OS X下配置 cx_Oracle,让python能连接Oracle里讲了怎么在OS X里配置Oracle连接之后,新问题来了:以前装的PIL,当import _imaging时错:

File "", line 1, in ImportError: dlopen(/Library/Python/2.6/site-packages/PIL/_imaging.so, 2): \ Symbol not found: _jpeg_resync_to_restart Referenced from: /Library/Python/2.6/site-packages/PIL/_imaging.so Expected in: flat namespace in /Library/Python/2.6/site-packages/PIL/_imaging.so

利用django做multi-db项目时,还是蛮方便的,除了使用using语句在编程中指定数据库,还可以通过编写router的方法更有序地解决这个问题。

下面以Oracle举例,首先,在settings.py里应该有这些设置分别指向不同的数据库:

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.oracle', 'NAME': 'YourDBName', 'USER': 'user1', 'PASSWORD': 'user1', 'HOST': '172.0.0.0', 'PORT': '1521', }, 'db1': { 'ENGINE': 'django.db.backends.oracle', 'NAME': 'YourDBName', 'USER': 'user1', …

有些wsdl没有定义schema,别的语言的库可能会自动修补这个问题,但是suds不会。当你的程序出现类似如下错误时,极有可能就是碰上了这种wsdl:

Type not found: '(string, http://schemas.xmlsoap.org/soap/encoding/, )

解决方案:

from suds.xsd.doctor import ImportDoctor, Import from suds.client import Client imp = Import('http://schemas.xmlsoap.org/soap/encoding/') doc = ImportDoctor(imp) url = '你的wsdl url地址放在这里' …

第一步: yourmac:~ Alan$ cd ~ yourmac:~ Alan$ sudo vim .bash_profile

然后在.bash_profile中加入以下内容,并保存。 #Oracle 配置开始 export ORACLE_HOME=/Applications/Oracle/instantclient export LD_LIBRARY_PATH=$ORACLE_HOME export DYLD_LIBRARY_PATH=$ORACLE_HOME export SQLPATH=$ORACLE_HOME export PATH=$PATH:$ORACLE_HOME/bin #for cx_Oracle,这是必须的,强制Python使用32位版本,当不使用Oracle时,可以把这行注释掉,恢复到64bit export VERSIONER_PYTHON_PREFER_32_BIT=yes