在给django项目添加事物管理时遇到的一些问题
:Python    :kukei    :2014-08-13 16:36:51
:评论(0)

今天在给sdcms项目的商品管理模块添加事物控制时发现,使用了各种装饰和with方法以及手动控制事物后依然没回滚,一度让我很迷茫。最后开始怀疑是不是mysql的问题,果然检查了mysql的存储引擎后发现,mysql默认引擎是MyISAM,但是它不支持事物,只有使用InnonDB引擎才行。此时我想起了以前遇见过这个问题,许久不用给忘记了。

解决方法

1.查看引擎

mysql> show engines;
EngineSupportCommentTransactionsXASavepoints
MyISAMDEFAULTDefault engine as of MySQL 3.23 with great perform...NONONO
CSVYESCSV storage engineNONONO
MRG_MYISAMYESCollection of identical MyISAM tablesNONONO
BLACKHOLEYES/d.....
解决IOError: decoder zip not available问题
:Python    :kukei    :2013-05-15 10:33:26
:评论(1)

前一段将换了个vps,将原来的程序部署到新vps后发现在上传图片或生成缩略图时报错“IOError: decoder zip not available”,当时执行的是将png图片制作一个缩略图,而执行其他图片,比如jpg时就没报错,看来是pil的支持组件缺失了zlib部分了。

知道原因就好办了,安装zlib,重装pil,重启uwsgi即可。

第1步:删除已经安装的PIL:

$ rm -rf /usr/lib/python2.5/site-packages/PIL

$ rm /usr/lib/python2.5/site-packages/PIL.pth

第2步:安装JPEG库和FreeType2库

$ apt-get install libjpeg-dev

$ apt-get install libfreetype6-dev

第3步:编译PIL

建议编译之前最好先删除掉Imaging文件夹,重新用tar从压缩包里解压一个干净的安装程序

$ cd .....

python在window和linux上目录分割符的问题
:Python    :kukei    :2013-03-01 09:44:54
:评论(3)

我们经常的工作方式是在window下开发和调试代码,无误后发布到linux服务器上运行,这其中会遇到window和linux的差异的问题,其中之一就是目录分割符的问题,如果你在进行目录或文件的操作,你就有感受了,今天特地将python在这两个平台上处理做个测试,记录在此。

window平台上:

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import os
>>> path = 'D:\My Works\wkq'
>>> os.chdir(path)
>>> os.getcwd()
'D:\\My Works\\wkq'
>>> os.listdir('D:\My.....
SAE-Python版本正式对外开放了
:Python    :kukei    :2013-03-01 08:51:47
:评论(0)

昨天晚上登陆sae后得到一个推送的消息:

尊敬的用户,您好!
 SAE Python平台正式对外开放啦!
 SAE Python平台于2011年8月开始开发,2012年年初发布测试版,经过一年多的测试升级后,2013年2月底正式结束公测,对外开放。
 即日起,所有SAE用户均可自由创建Python应用。所有Python应用,除流量计费外,HTTP/HTTPS/Cron/TaskQueue的CPU计费项将完全免费。
 SAE Python平台具有以下特点:
  1,完全基于Python2.7,迁移成本低;
  2,完全支持主流框架,Django、Flask等;
  3,支持SAE所有服务,Cron、TaskQueue、KVDB、MySQL、Storage等;
  4,对于商业应用支持代码加密,用户可直接上传pyc;
  5,目前已经有近万应用在其上运行,经过SAE商业应用检验,可靠性高;
  6,低成本,目前仅针对流量做计费,而Python虚.....

PIL的报错之“The _imagingft C module is not installed”
:Python    :kukei    :2013-02-25 09:27:35
:评论(2)

现在sae上的python版本是2.7的准确说应该是2.73,这个版本是python官方在2版本上支持的最新版。而我本机的版本是2.6,在使用上会发现一些本地可以正常运行,而sae上报错的情况,我怀疑是python版本的问题就更新了本地版本到2.73,升级中出现了PIL的错误,解决方法如下:

首先PIL是一个python的图片类库,使用方便,功能强大,但是从官方http://www.pythonware.com/products/pil/下载的2.7的最新版本在使用中报错The _imagingft C module is not installed,具体的说就是如果在程序中引用这几个包时import Image, ImageDraw, ImageFont,会报错,因为官方的包中没包含freetype的原因。

如果是linux系统,解决这个问题就要重新安装freetype,而window平台需要带上freetype重新编译PIL,我.....

python中使用minidom来处理xml(一)
:Python    :kukei    :2013-02-19 16:13:39
:评论(1)

python中用来处理的xml的方法很多,处理简单的xml我们用python自带的xml.dom.minidom即可,下面我们看看如何用minidom来简单的生成和读取xml。

先看如何生成一个xml:

Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
 
    ****************************************************************
    Personal firewall software may warn about the connection IDLE
    makes to its subprocess.....
python字符串格式化以及转义的一些说明
:Python    :kukei    :2013-02-17 10:34:32
:评论(0)

python字符串格式的方法有多种,使用起来也很方便,举例如下:

#%方式
>>> 'a = %s' % (1, )
'a = 1'
#format方式1,注意序列从0开始
>>> 'a = {1} + {2}'.format(1,2,3)
'a = 2 + 3'
#format方式2
>>> 'a = {b1} + {b2}'.format(b1=2,b2=3)
'a = 2 + 3'

其中%方式中有个情况需要注意,字符串中如果要输出‘%’本身就需要转移否则报错,转移方式为‘%%’,看具体测试代码:

>>> 'a = %s' % (1, )
'a = 1'
>>> 'a =% %s' % (1, )
  
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    'a =% %s' % (1, )
T.....
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.....