官方接入文档在这里,但是检验signature的代码,官方只有php的,在Django中的python代码应该这么写:
import hashlib from django.views.decorators.csrf import csrf_exempt from django.http import HttpResponse @csrf_exempt def wechat(request): signature = request.GET.get('signature') timestamp = request.GET.get('timestamp') nonce …微信的自定义菜单的接口要的是json格式数据,如果post过去只要是中文就报(英文都正常):{"errcode":40033,"errmsg":"invalid charset. please check your request, if include \uxxxx will create fail!"}
python的解决方案:
在post过去的json字符串后面加上.encode('utf-8'),比如 menu_json.encode('utf-8')。
2001年到2002年,使用asp为主要开发技术开发网站,偶尔用VB写COM+业务组件,2年。
从03年到09年,使用.net作为主要开发技术做B/S管理软件项目,以及建立垂直电子商务网站,7年。
2010年才开始混开源社区,开始学习python,linux,重新回头练习C语言,到现在为此,3年多一点,哦,差点忘了,这期间还穿插Objective-C,Node.js之类的语言或者技术用于开发衍生项目。
这中间,少不了Java的身影,中间参与过J2EE的项目,但主要职责不是在一线开发,Android的Java代码除外。
讲好话:
C#是一门很好的语言,我现在还认为C#比Java要优雅(很俗,但找不到更恰当的词来形容了),每次写Java代码,碰到类型转换啊,异常处理这些东东的时候,无比怀念C#。 入门门槛低,能用低成本程序员迅速启动项目,比如我曾经的一个同事,就是上海英雄钢笔厂一个多年的钳工上几个月北大青鸟转行过来的,当然,他后来总是怀念以前在国企时福利多么优厚,过年过节可以大块扛肉,大箱拿东西回家的日子,这是后话。 版本升级流畅。 MSDN真全啊,几乎绝大份问题都可以从MSDN中得到答案。 IDE真强大。
不过这男一人变心,看问题的角度一变,有时候优点变缺点,上面2、4、5就是这种情况。
讲坏话:
入门门槛低,往往带着的潜台词是团队整体素质相对低,在项目启动的时候不会暴露太多问题,但一旦进入发展期,团队解决问题的能力不高。这也是多数.net团队只能作中小项目的原因。 MSDN太全了,当在MSDN里找不到解决方案时,习惯性放弃了寻找别的解决方案的尝试。普通.net程序员(非牛B程序员)在google上查阅资料的能力低于使用python等开源技术的程序员。 IDE太强大的后果是,程序员学习.net系列语言其实是学习怎么使用Visual Studio .Net,对语言特性等等往往是在学习了很久之后才意识到。 .net团队习惯性依赖微软的官方技术支持,当出现问题,而官方也没有解决方案时,.net开发人员通常选择的是等微软发布下一个.net版本。 非心灵鸡汤小故事: A:在jQuery插件还没这么发达的年代,我当时所处的一个开发团队有一名Javascript高手,本来打算写一个下拉菜单,但是看到预告说asp.net下一个版本要内置这东西,然后放弃了,而这“下一版本”,等了差不多半年。 B:我担任架构师的某垂直电子商务网站,我首先使用了asp.net的图表控件,但是生成图片的,很不生动,后来打算换silverlight,再后来把这部分开发工作转给另外一个同事,不了了之。。。事实上,当时的flash解决方案处处皆是,而且跟.net结合也不是什么难事,所有人都明白这一点,但是,大家都习惯性地依赖微软,到现在为此,我离开那家公司两年多了。。。还是用当初那个图表控件。 对中小团队来说,VS.NET,Sql Server,Windows服务器等,都价格不菲(要说是可以用盗版,就只能,嗯,啊,今天天气不错啊)…
在家陪父母这几天没啥事,更新了下博客程序。
1、前端HTML5 + CSS3,响应式设计,可以试试在手机或平板的浏览器里浏览,但遗憾的是,对IE9以下版本的IE支持很糟糕。
2、Django更新到1.5,重新设计了新的用户模型。
ps. 在windows下看,字体真是惨不忍睹啊,google font api又没有中文解决方案,郁闷。
一个极简单的API文档和任务清单项目,最早是为编写在线文档花两天时间搭建的,后来加入任务清单功能。
音乐SNS网站dongting.fm开源,2010年学习django写的第一个网站,开始是基于django1.3,后升级为1.4。
项目地址:https://github.com/laonan/dongtingfm
原网站:dongting.fm
点击project的properties,选择"Android",在"Project Build Target"项,选择合适的项打上勾。
更多参考:
http://stackoverflow.com/questions/11278319/importing-project-gave-unable-to-resolve-target-android-7
三宝侗寨位于榕江县的车江大坝,进寨要买门票,正逢一家法国人在导游的带领下接受寨门口的敬酒,纯表演性质的。进去之后,我试着跟他们讲英语,不理我,而我表示跟他们学法语时,他们突然来劲了,“蹦猪蹦猪”地教了我们半天。看来法国人会讲英语却不愿意讲的传闻是真的。
进寨就碰到一个妇人在气急败坏地骂街,非常有情调,跟我小时候在老家听到的那架势一模一样,可惜他们讲的话不不大听得懂。
寨里的参天榕树保护得很好,之前在另外一个叫黔途网的网站上看到站长拍的三宝榕树照片很棒:http://chiyou.name/page/new/2009/csgk/5/index.htm。
本文自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 …如果出现下面错误:
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 …有时候为了只让有权限的用户下载,不能直接把文件放在硬盘上以静态文件的方式直接提供下载,下面这段代码实现通过文件流的方式下载:
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: …如果你还没读过第一篇,先跑到这里去瞧一瞧,我保证你多花这么一点时间是值得的。
到目前为止,我们已经学会了用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可真是不遗余力啊。)光说好的也不行对吧,让我们来看一下不好的。
…
这是我的关于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 …