Python
文章平均质量分 80
marlonyao
这个作者很懒,什么都没留下…
展开
-
Python发邮件
下面的代码的作用是将电子书作为附件发送到163邮箱。 #!/usr/bin/env python# -*- coding: utf8 -*-import smtplib,email,os,sysfrom email.MIMEBase import MIMEBasefrom email.MIMEText import MIMETextfrom email.MIMEMu...2010-03-27 11:25:02 · 74 阅读 · 0 评论 -
Mongodb内嵌文档插入性能评测
Mongodb作为典型的文档数据库,支持内嵌文档和复杂的查询,这给数据库建模带来了更多的灵活性。在一个博客应用中,有博客(Blog)和评论(Comment),每篇博客可以有多条评论。在关系数据库建模中,通常博客和评论分别对应一张表,评论表有到博客表的外键。在MongoDB中,也可以像关系型数据库那样,将博客和评论分别放到不同的集合中,另外也可以选择将评论嵌入到博客文档中。对于后者,一个博客的数据结...2011-11-20 18:03:43 · 858 阅读 · 0 评论 -
python变量覆盖陷阱
我已经好几次碰到这样的错误了,每次碰到都花费我大量的时间,下面总结下我所犯的错误,希望对大家也有帮助。[b][size=medium]闭包[/size][/b]我想抓取一系列的网页,抓取网页很慢,然后对网页内容进行处理,为了提高速度,我启动了多个线程去抓。以下是其代码:[code="python"]import sysimport threadingimport t...2011-04-03 21:35:46 · 966 阅读 · 0 评论 -
在App Engine下运行Django 1.2
我不知道[url=https://appengine.google.com/]App Engine[/url]是从什么时候开始默认支持Django 1.2的,好像支持的时间不长,我懒得去求证了,反正你去下载最新的SDK准支持,保准支持。要在App Engine下运行Django通常有两种方法:一种是使用[url=https://bitbucket.org/wkornewald/django-non...2011-03-20 22:12:28 · 193 阅读 · 0 评论 -
Python下Base64编码
在Python下有Base64编码的库,可直接用,我自己写了个,主要是想调整编码字符的顺序。注意:如果只是想调整最后两个字符(默认为"+/"),用不着自己写,b64encode有个altchars参数,用来指定最后两个字符。先将代码放在这里,有需要的可以直接拿来用。[code="python"]_keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi...原创 2010-12-04 12:53:53 · 117 阅读 · 0 评论 -
实现简单的Future
异步调用的困难之处我们不知道它什么时候会返回,通常的解决方法是使用回调来通知异步调用的结束。在大部分情况下,回调这种方式工作得很好,但是当异步调用太多时,太多的回调会将代码弄得很乱,同时很难跟踪代码执行过程。另外,它也使得在同步调用和异步调用之间切换变得困难。Java中有Future的概念,它封装了一个Callable对象,调用Future的get方法,不管Callable是异步调用还是同步调用,...原创 2011-02-19 19:38:24 · 99 阅读 · 0 评论 -
创建简单声明式python对象模型
创建简单python声明式对象模型要创建一个简单的Author对象,不考虑数据库操作,通常我都会这么写:[code="python"]class Author(object): """simple model represents Author""" def __init__(self, id=None, name=None, address=None, sum...原创 2011-02-19 12:27:36 · 167 阅读 · 0 评论 -
用RestrictedPython创建Python Sandbox
众所周知在Python下可以用eval和exec来执行任意的python表达式及脚本,但是,当运行的脚本来自于网络时这样做就会有安全风险,你总不想运行包含"import os; os.system('rm -rf /')"的脚本吧?对这类问题,通常的解决方法是为来自网络的脚本创建一个沙箱(Sandbox),浏览器在执行来自网络的Java Applet时会创建一个权限较低的Sandbox,在其中运行...原创 2011-02-13 17:35:17 · 1643 阅读 · 0 评论 -
支持通配符的DNS代理
hosts文件可以手动配置一些域名的IP地址,它的优先级最高,有些网站的IP地址不能被正确的解析,这么情形在我国比较常见,可以直接在hosts文件直接指定网站的IP地址来解决。hosts文件的一个缺点是不支持通配符,要为所有的blogspot网站指定IP地址几乎不可能。解决办法就是在本地建个DNS代理服务器,它负责解析hosts文件中的通配符域名,有一些开源的dns服务器,比如bind和dnsma...2011-05-05 22:23:05 · 1097 阅读 · 0 评论 -
wxpython中工作线程与主线程交互
在wxpython中,像其它GUI框架一样,如果要进行耗时很长的任务,需要将该任务放在工作线程中运行,以保证程序的响应性。工作线程可能会需要与主线程进行交互。这可以分为两种情况:一是工作线程只是向主线程单向通知工作进行的状态,比如任务完成进度,并不要求主线程回应。第二种情况是工作线程要调用主线程的方法,并且要求其返回,例如工作线程运行中需要弹出对话框让用户输入必要的信息(在wxpython中,显示...原创 2011-01-15 23:56:32 · 1099 阅读 · 0 评论 -
Python中用MetaClass实现委托、不可变集合
委托(delegate)是许多设计模式(如Decorator, Proxy)的基础,实现委托的一般方法是在委托类为每个需要委托的方法定义一个方法,它的仅有的实现就是对被委托对象调用同样的方法。例如,要实现ImmutableList,可以这样做:[code="python"]class ImmutableList(object): def __init__(self, delega...原创 2010-09-13 16:01:42 · 103 阅读 · 0 评论 -
用编程语言作数据库测试的配置
在[url=http://marlonyao.iteye.com/admin/blogs/760763]上一篇博客:django, mongodb与测试[/url]中,我推荐使用json作为数据库测试的配置格式,因为json格式简单,语言中立,容易解析, 又不似xml那样繁琐。json有它的缺点,主要有:[list][*] 没有注释[*] json不能表达复杂的类型[*] json...原创 2010-09-11 11:25:44 · 96 阅读 · 0 评论 -
django, mongodb与测试
在django下很容易写测试,只需要继承DjangoTestCase,它会自动创建一个测试数据库,每次运行时加载必要的fixture数据,以保证每个测试的初始状态是一致、可预测的。其前提是必须使用它的dbmodel,如果使用MySQL, Oracle等关系型数据库,这自然不是个问题。如果使用其它数据库,例如当前相当流行的NoSQL,这时DjangoTestCase就不能直接拿来用了。如果我们hac...原创 2010-09-11 10:05:39 · 220 阅读 · 0 评论 -
一个简单的Form向导实现
Django的contrib中带了个FormWizard,但是我觉得它实现得很不好,不易使用,扩展性不强,所以就自己实现了一个。这里只说用法,首先得定义一个自己的Wizard,它继承SimpleWizard,并在构造函数中传递每一步需要的Form。[code="python"]class TestWizard(wizard.SimpleWizard): def __init__(...原创 2010-06-20 18:42:47 · 155 阅读 · 0 评论 -
再一个用于调试Django模板的标签
主要用于在Html中递归输出对象的属性,这对调试Django相当有用。用法:[code="python"]{% inspect object %}[/code]实现:[code="python"]from django import templateimport reregister = template.Library()def do_in...原创 2010-06-15 17:42:04 · 137 阅读 · 0 评论 -
几个用于调试Django模板的标签
Django模板有诸多限制,例如不能调用方法,不能执行任意的Python表达式。它的设计者表示这样做是故意的,我不去争论这样到底是好是坏,但在调试时我们确实需要想执行任意的Python表达式。Django提供了自定义标签的机制,再加上Python的eval函数,使得在Django模板中也能执行任意的Python表达式。我写了三个标签,分别是set, print和import。set的语法为...原创 2010-06-15 17:18:39 · 280 阅读 · 0 评论 -
探索Python下的property, classmethod, staticmethod的实现
Python有几个内置方法poperty, classmethod, staticmethod,其中property用来将方法变成属性,而classmethod将一个类的函数变成类方法,staticmethod将类的一个函数变成静态方法。它们是如何使用的,我这里就不讲了,只讲它们可能是怎样实现的。之所以说“可能”,是因为我并不确定,我对Python也只是初学,并且这里讲的可能也只是其中一种实现方式...原创 2010-05-30 21:10:36 · 104 阅读 · 0 评论 -
Python农历公历转换
实现中主要有两个方法,一个是get_lunar_date,它根据公历返回农历,返回是一个四元组(year,month,day,leap),leap为True表示返回的月份在闰月,为False时表示不是闰月。另外一个是get_solar_date,它根据农历返回公历,由于农历存在闰月,可能有一个农历日期对应着两个公历日期,这个方法返回一个数组,如果农历月份为闰月,这个数组会包含两个公历日...2010-04-24 17:38:41 · 358 阅读 · 0 评论 -
Python模板性能评测
本篇主要是对django, jinja, jinja2, mako和cheetah五大python模板引擎性能的评测。对于这几个引擎,分别测试它们渲染字符串,变量替换,以及循环处理的速度,所有结果输出均为unicode,变量替换均需html转义,所有模板中,只有django默认开启了html转义,其它模板需要显式地打开。所有测试均不计算模板加载、编译时间,只计算渲染时间,因为模板通常只会加载一次,...2011-11-28 18:00:58 · 286 阅读 · 0 评论