python中取上个月当天的函数
:Python    :kukei    :2013-01-31 08:51:23
:评论(0)

在项目中需要一个取上个月当天的函数,无非就是月数减一,如果是1月就年数也减一,然后转换为日期格式返回,前几天用的一直没问题,今天突然开始报错“day is out of range for month”,仔细一看发现原来是小月没有31日的问题,赶紧改了。

新函数代码如下:

def lastMonth(date):
    year = date.year
    month = date.month
    day = date.day
    if month == 1 :
        month = 12
        year -= 1
    else :
        month -= 1
       
    if day == 31 and month in (4,6,9,11):
        day = 30
    if day > 28 and month == 2:
  .....
使用python上传图片生成缩略图保存云存储的方法
:Python    :kukei    :2013-01-27 15:56:09
:评论(0)

以前我们上传图片以后获得文件内容然后将文件内容写到指定的目录中,如果要生成缩略图就读取原图,生成缩略图再写到缩略图目录。现在出现了云存储之后这种做法就需要改变了,因为不能使用文件操作了,需要在内存中操作文件然后使用云储存的api来保存文件了。

如果用python语言来做这些操作的话就要使用到PIL这个图片处理的api了。今天我们要做的就是将上传的图片生成缩略图然后上传到云存储。本来是个很简单的程序(会做了之后),但是没做出来之前我的确苦恼了一段时间。原因是这个操作不能在本地调试,错误无法及时准确的定位,这个问题已经通过traceback写日志的方法解决了,见python异常处理及异常信息追踪。另外一个问题是云存储的api能上传的是File格式的对象,而生成的对象Image不是这个格式,后来发现了StringIO,这个对象原来就是内存文件格式的,这些问题就迎刃而解了。

下面是我具体实现的代码。

def upload(self, **ar.....
python异常处理及异常信息追踪
:Python    :kukei    :2013-01-26 22:03:57
:评论(1)

在进行异常处理时我们想得到更详细的信息,这样我们打印在log就能更好的解决问题了。比如我们想得到那个文件的第几行出错了,这些问题我在以前的异常处理中没有太注意,因为我们在调试时能一步一步的跟踪代码,但是如果你有一个服务是无法在本地调试的,你就需要得到更多的异常信息了。

方法1:traceback

在except中执行

info = traceback.format_exc()
print info
str: Traceback (most recent call last):
  File "D:\Program\python\quke\sd\log\views\imageView.py", line 48, in uedtUp
    thumbname = 'thumb/%s' % (filename.encode('utf-118'), )
LookupError: unknown encoding: utf-118

方法2.....

apache上配置独立进程python应用
:Python    :kukei    :2013-01-24 17:39:18
:评论(0)

之前一直使用nginx+uwsgi来做python应用的服务器环境,以前也写了相关的博客在nginx上配置python关于uwsgi以及安装方法;这些都是我以前在自己的vps上配置python环境的一些记录,当然后来使用sae后就不再搞这些了。今天是因为在公司开发了一个python应用需要部署到一个aix6的主机上,这个主机上已经部署好了apache+mod_uwsgi环境,而且已经有一个应用在正常执行了,但是我将新的应用部署上去时报错了,新老应用都出现了乱码,偶尔还报错。原因是两个应用的编码格式不一样,老应用是gb2312,新的是utf-8,而现在报错,我基本可以确认是因为两个应用共用了一个内存,这是我不愿意看到的。随后我将每个应用的入口文件中加入了强制修改编码格式的内容:

import os,sys
reload(sys)   
sys.setdefaultencoding('utf8')  
#sys.setdef.....
django中使用oracle数据库的配置
:Python    :kukei    :2013-01-07 14:55:09
:评论(1)

工作中需要开发一个小系统,现在有的环境是支持python的,我计划是用python+django+oracle的配置来做开发,服务器是一个IBM的小型机,使用apache+mod_python配置。

我以前是用django都是用的mysql数据库,服务器都是用的nginx+uWsgi做配置;此次是一个新的尝试。

服务器方面很好搞定,apache+mod_python配置网上教程满天飞,而且之前我也适用apache很久了。django+oracle倒是第一次,首先需要下载一个cx_oracle的类库,下载时注意区分win版本和linux版本,注意python的版本号,注意oralce的版本号,好麻烦啊。

django配置如下:

#数据库连接配置
DATABASES = {'default': {
        'ENGINE': 'django.db.backends.oracle',
        'NAME': 'actdb.....
SDLog 0.1b博客程序功能介绍
:sdlog    :kukei    :2012-12-23 21:48:34
:评论(6)

SDLog是一款使用Python编写的运行在SAE,BAE等云计算平台上的上的开源博客程序。现在它的0.1Beta版本已将发布了。

现在将SDLog 0.1b版的功能做下介绍。

基本功能:

  1. 文章显示;文章列表显示,摘要显示两种模式;可以显示内容相关的文章;可以显示文章的封面;

  2. 文章发布;文章发布,编辑,删除等功能;

  3. 文章设置;文章可以存在草稿,可以隐藏,置顶,加密;

  4. 评论;

    1. 可以设置当前文章是否可以评论;可以设置评论是否审核后才显示;

    2. 评论内容可以回复,可以作废(删除);

    3. 显示评论者头像;评论被回复可以用邮件提醒;

    4. 可以对文章进行好评和差评;

  5. 标签;可以给文章设置标签;可以查看同标签的文章;在侧边栏显示标签云;

  6. 图片;可以给上传图片,然后显示在文章中;可以给文章添加封面;

  7. 目录;在侧边栏显示目录列表及目录下文章数目;

  8. 菜单;在导航栏显示多级菜单;

  9. 链接;在侧边栏显示友情链接;

  10. 显示特效;侧边栏底部跟随功能;侧边栏固定长度内容滚动;

  11. 验证码功能;

用户管理:

  1. 用户注册.....

django中基于memcache的session中dict允许几层呢?
:Python    :kukei    :2012-11-29 14:47:58
:评论(1)

使用django框架时session有多种存储方式可供选择,其中我认为基于memcache是最快的,因此我的应用中均用memcache做session的存储,而且现在的云计算平台比如gae,sae,bae以及准备中的ace都支持memcache。然而我在使用中发现了一个问题就如果session中存储的值是字典的话,到第三层是无法保存的。如比我的session存储的结构如下:

user=Users()
#其中user中有个字典属性childMeta
power = {'isLogin':False, 'user':None}

如果将power保存到session中时childMeta字典中的值会丢失,这个现象在bae是完全丢失。在sae上时偶尔丢失(第一次肯定丢失),我测试看到的现象是这样。在本机测试是没有这个问题的,因此我怀疑是ae平台做了什么限制,或者ae平台的其他限制影响到了这个功能。

在此记录此事,以备以后进一步研究。

其实对.....

BAE执行超时问题“Execute request timeout.”的新进展
:Baidu    :kukei    :2012-11-28 08:59:21
:评论(3)

上个月发了篇博客《BAE之页面执行超时问题“Execute request timeout.”》记录了我在BAE上的测试应用SDLog的超时报错情况,曾将怀疑是使用了独立域名的问题,即便是这个问题也是BAE的问题。最后在bae展示了更详细的错误提示后可以确定是memcache的问题。我将这个问题发到百度开发者群中无人响应,我只好将这个问题发到了百度开发者中心的客服支持和邮箱dev_support@baidu.com,还好得到了反馈,虽然反馈结果是正在处理中。

今天为什么重提旧事,是因为我的另个应用SDPhoto在BAE平台上执行是依然报这个错误,而且执行巨慢,我正在考虑这个应用到底能否在在BAE上执行。好了先看看百度反馈吧。

邮件反馈如下:

您好:
  这个问题我们的技术正在查询处理,还请您耐心等待,我们会尽快修复的
百度开发者中心

From: xxx
Date: 2012-11-24 14:52
Subject.....
Django之模型(model)中的choices字段的使用
:Python    :kukei    :2012-11-19 11:18:23
:评论(1)

Django模型中的字段有个choices属性,这个属性可以提供被选数据。如果一个字段设置了这个属性,在模版中如果我要显示这个字段,那么django模版系统就会将它默认解析为一个下来菜单,这样对于一个静态的下拉菜单式很方便的,下来我们看下django官方文档中对这个属性使用的介绍。

我们这儿有个例子,我们先定义一个模型,名字为Person ,这个Person 包含了名字和性别两个字段,代码如下:

from django.db import models
class Person(models.Model):
    GENDER_CHOICES = (
        (u'M', u'Male'),
        (u'F', u'Female'),
    )
    name = models.CharField(max_length=60)
    gender = models.CharField(max_.....
BAE之页面执行超时问题“Execute request timeout.”
:Baidu    :kukei    :2012-10-28 20:08:31
:评论(4)

之前一直在苦恼于我的BAE应用报错“Execute request timeout.”(我也曾经在我的文章http://quke.org/post/bae-test1.html中提到过这个问题),但是没有更详细的提示,我曾怀疑是我的dns服务员器到bae之间的延迟问题,不想今天再次重现了这个问题后发现bae增加了超时提示,我猜这个提示应该是超时是正在执行的函数,果不其然,是缓存引起的。

Execute request timeout.
file[/home/bae/instanceall/instance1/pyruntime/lib/python2.7/bae/api/memcache/baecache.py]
function[__transf]:lineno[97]

这个就是我执行了beta.quke.org页面执行的执行超时提示,这个提示不是每次有出现,是随机事件,我现在执行怀疑是BAE的memcache服务问题,看看百.....