Python Tech

API设计参考(附Python SDK例子)

在Web应用中,API(Application Programming Interface 应用程序接口)的使用频率非常高,Google、推特、脸书,每天都会处理几十亿次的API调用请求。API接口一旦公布很难修改,所以设计要慎之又慎。本文主要归纳几种流行的Web应用API接口,总结它们的特点,供需要设计API的开发者作为参考。如果只需要RESTful的API模版建议参考Swagger。顺带介绍编写Python…

Continue Reading
Python Tech

用rsyslog处理日志

之前是用mysql数据库来保存用户的访问日志,现在已经超过2亿了,速度非常慢,还分了三张表,要换一种记录日志的方式。现在暂时没有时间做数据挖掘,要做的只是把日志先存起来,所以直接用linux自带的rsyslog来做。用户访问时,以UDP的方式,将访问信息封装成JSON发到rsyslog的端口,rsyslog会以文本的方式直接记录下来。以后就可以用syslog-ng之类的工具写到mongo或其他数据库。…

Continue Reading
Python Tech

用Python登录正方系统获取课表

没想到毕业之后还会折腾这破玩意。大学时用RGSS语言完成过一个类似的功能(虽然最近才知道它和Ruby语言有关),但没用Python写过。其实代码完全没难度,但这套系统很讨厌,它用.NET语言写成,出现最多的是页面是“当前访问人数过多,请稍后访问”,系统开发者最擅长的是制作登录界面,一口气做了5个(这得多闲啊……)。其中的default3.aspx不需要验证码。登录时必须带一个叫__VIEWSTATE参数,推测是系统自动生成,每隔一段时间会更换。…

Continue Reading
Tech

Ubuntu 12.04 安装scribe 的笔记

首先,如果你不是很熟悉C++,请放弃安装scribe。这个项目有年头没更新了,分布式日志写入可以考虑haodoop的flume或是支持MongoDB,能直接获取scribe输出的fluentd。其次,建议按照这篇笔记记录的版本,或者手动修改代码,让scribe支持高版本的filesystem以及各种库,否则必然会出现各种错误。而且这些问题虽然是同样的报错但在Google上有各种千奇百怪的解释。

scribe依赖Boost库,用thrift实现跨语言,还需要fb303来做监控。在CentOS上找到了rpm包,在Ubuntu上,apt-get…

Continue Reading
Python Tech

Django托管在Github上的实践

Django1.4上个月发布了,有些模块换了名字,加密方式也变了,最明显的变动是目录的组织方式,manager.py和其他配置文件分开存放。这些改动导致之前的目录组织方案将不再适用。所以整理一下1.3之前在Github上的实践,今后开发的新项目再转到1.4。

requirements.txt, local_settings.py

把Django项目托管到Github上,README是给不熟悉项目的人看的,未必得能给自己省多少力气。但写requirements.txt绝对是双赢。Django项目肯定会用到一些模块(至少得装Django…),用一个txt文件列出所有会用到的模块,以换行分割:…

Continue Reading
Python Tech

从Discuz中整合用户数据到Django

国内很多论坛使用的都是Discuz,Discuz为了满足各种需求,已经变得非常臃肿,很多新技术如果要在Discuz上应用成本很高。于是用Django重写了一个,只保留基本的发帖功能。

老论坛中有近10w的用户数据,有些是注册机注册的,也有一些已经不活跃的用户,因此不考虑直接导入用户数据。大致的思路是:当某个用户登录时,查询旧的Discuz数据库,如果用户名和密码都正确,则把这个用户写入新系统Django的用户表中。这部分逻辑我是写在forms里,登录仍然用Django自带的auth_view来处理。…

Continue Reading
Tech

从零开始搭建Django Solr的环境

本文介绍在Ubuntu系统中,用django-haystack处理Django搜索请求的方法。如果有涉及连词、多条件等较为复杂的搜索需求,这是一个很不错的解决方案。如果只需要基本的搜索功能,或是刚接触Django的用户则不推荐使用,这个模块功能强大相应的配置也很繁琐,稍有不慎就会出错。

安装tomcat, solr, django-haystack:

$ sudo apt-get install tomcat6
$
Continue Reading
Python Tech

Django用uploadify实现图片批量上传

分享一下在Django中使用uploadify——一个jQuery批量上传插件——的方法。github上的django-uploadify使用的是2.1.4版本,上传button只能使用图片,不能很方便的修改样式。本文针对的是uploadify 3.0.0版本。

uploadify可以结合Django自身的ImageField,或是配合easy_thumbnails等第三方app来使用。比较稳定,我在几个项目中处理批量上传都是用它,没有出现什么问题。但因为是用flash上传,在开发工具中监控不到network的动作,只能通过函数返回的错误信息来调试,所以比较麻烦,但调通一次就一劳永逸了。…

Continue Reading
Tech

在Dotcloud上搭建NodeJS+MongoDB环境

主要目的是练习KnockoutJS和Bootstrap,后台为了保持一致就用现成的NodeJS + MongoDB了。写好需要的功能,本地测试通过之后想试着布置一下,正好也可以了解Dotcloud架设这种环境的方法,网上没有现成的文档,有相关的文章,但不是用ExpressMongoskin写的,所以自己动手搭建了一个,现在把方法分享一下。

Dotcloud Configure

新建一个项目,目录结构和其他应用基本相同。忘了的话可以参考…

Continue Reading
Python Tech

Django复制记录的方法

最近的Django项目中有复制记录的需求。数据库里有一张名为Party的表,记录用户创建的party,现在要让用户能够复制一个新的party。本身非常简单的一个功能,但运行的时候出错了。我以为是复制过程出错,所以测试了一下Django中复制记录可能遇到的情况(后来发现是其他代码的逻辑出了问题),结果整理如下。

1.Reset pk

在Django中复制一条记录最简单的方法应该是先取出这条记录,将它的主键设置为None,然后再保存一次。…

Continue Reading