放糖的绿豆汤 http://quke.appspot.com/ 记录生活、工作、学习上的点点滴滴...... /rss2/ zh-cn GAE报错“NameError: global name 'execfile' is not defined”  今天重新调试sdblog时,因为前一段重装了电脑,装了python3.1;在用eclipse + pydev1.5调试gae时报错:

 
  1. >> dev_appserver.py C:\DOCUME~1\palu\MYDOCU~1>\helloworld 
  2.  
  3. Traceback (most recent call last): 
  4.   File "E:\Program Files\Google\google_appengine\dev_appserver.py",
]]>
http://quke.appspot.com/log-334.html
Google AppEngine中的Django更新到1.0 GAE的Django需要从0.96升级到1.0了。

更新文档看:http://docs.djangoproject.com/en/dev/releases/1.0-porting-guide/#porting-your-apps-from-django-0-96-to-1-0

]]>
http://quke.appspot.com/log-290.html
GAE异常“required more quota than is available”。  最近在处理数据备份和还原时碰到了这样的异常"The API call datastore_v3.Put() required more quota than is available.;"。

]]>
http://quke.appspot.com/log-224.html
异常“dictionary changed size during iteration”的原因及解决方法 今天在做一些对gae中缓存的更新操作时报了“dictionary changed size during iteration”异常,我在网上搜了下,其他人也有过此问题,但出现场景不同,因此我将我遇到的问题做一说明。

场景:

在gae的memcache存储了一个字典结构的对象,我要根据给去的字典名的一部分去找到这项字典删除;我的方法是先将memcache中的字典对象赋值给一个变量,用for循环找到在字典名中包含给出值的字典名,然后删除这个字典项,然后将这个字典在保存到memcache。代码如下:

  1. #!/usr/bin/env python 
  2. # -*- coding: utf-8 -*- 
  3. #code:utf-8
]]>
http://quke.appspot.com/log-213.html
python中的赋值和复制 python采用的是引用变量的结构,也就说如果你对一个变量赋值,并不是给这个变量开辟了一块内存空间而是将一个对象的内存空间地址告诉了这个变量,这样做的好处是便于管理,节省内存空间,便于内存释放等等。但是在一些特殊情况下还是需要一个有自己内存空间的变量,这样操作起来和原变量互不干扰。那就要用到对象的复制了。

接下来看看变量的复制如何操作:

需求:

你想复制一个对象.因为在Python中,无论你把对象做为参数传递,做为函数返回值,都是引用传递的.

讨论:

标准库中的copy模块提供了两个方法来实现拷贝.一个方法是copy,它返回和参数包含内容一样的对象.

import copy
new_list = copy.copy(existing_list)

有些时候,你希望对象中的属性也被复制,可以使用deepcopy方法:

import copy
new_list_of_dicts = copy.deepcopy(existing_list_of_dic]]> http://quke.appspot.com/log-212.html 在python如何获得自身模块的引用     在python中有个getattr和函数,非常强大,可以用字符串的形式获得一个模块中属性,函数的引用或者叫句柄;但有个小疑问就是无法直接获得当前模块的一个属性或函数,我曾苦苦的找寻了一段时间我以为用self之类的简单的内置的属性或之类的东西来作为自身模块的引用,但不幸的是一直没找到,可能没有这种东西。

    最后解决的方式就是在当前模块中引入自己,用from import方式来引入似乎让人感觉不太正常,为什么要在自身中在引入自己呢?实在没办法就退而求其次,在用到的地方在动态的引入吧。最后的解决方式就是使用__import__('模块路径')来引入自己。代码如下:

  1. #包名:lib.templatetags 
  2. #模块名:tags.py 
  3.  
]]> http://quke.appspot.com/log-208.html 在Django中自定义Tag和Filter(二)   在前一篇文章在Django中自定义Tag和Filter中介绍了自定义tag的方法,这篇文章中介绍下如何自定义fliter。

1.首先如上一篇所叙述一样先建立一个项目app,创建方式参考上一篇。

2.在项目中建一个名字为templatetags的包,名字必须是templatetags。

3在这个包中过滤器文件如filters.py,内容如下

  1. #!/usr/bin/env python 
  2. # -*- coding: utf-8 -*- 
]]>
http://quke.appspot.com/log-206.html
python中对字符串的操作使用总结  经常用到对字符串的操作,就把他们的操作方式从网上搜来了,记录下来,以便查询使用。

1.python字符串通常有单引号('...')、双引号("...")、三引号("""...""")或('''...''')包围,三引 号包含的字符串可由多行组成,一般可表示大段的叙述性字符串。在使用时基本没有差别,但双引号和三引号("""...""")中可以包含单引号,三引号 ('''...''')可以包含双引号,而不需要转义。
2.用(\)对特殊字符转义,如(\)、(')、(")。
3.常用字符串函数
1)str.count() //返回该字符串中某个子串出现的次数
2)str.find() //返回某个子串出现在该字符串的起始位置
3)str.lower() //将该字符串全部转化为小写
4)str.upper() //转为大写
5)str.split() //分割字符串,返回字串串列表,默认以空格分割
6)len(str) //返回字符串长度
例如:

]]>
http://quke.appspot.com/log-197.html
转-Python的函数和方法装饰漫谈(Function decorator)  装饰方法的产生:

Python2.2通过增加静态方法和类方法扩展了Python的对象模型。但是当时没有提供一个简化的语法去定义static/class方法,只得在定义好的方法尾部去调用staticmethod()/classmethod()方法达到目的。例如:
class C:
   def meth (cls):
       
   meth = classmethod(meth)   # 使meth方法成为类方法
但是这样会造成一个问题:当一个方法比较长时,很容易忘记尾部的调用。为了简化这个操作一个新的语法被加了进来:方法装饰,以@开头后跟装饰方法名,如@staticmethod/@classmethod,由此产生出decorator方法及decorator模式。现在我们可以这样写:
 
class C:
   @classmethod
   def meth (cls):
]]>
http://quke.appspot.com/log-194.html
Python 3.0将要发布了,有一个巨大的改变。 Python 3.0将要发布了,但是一个不好的消息是不向后兼容,看看他们怎么说的吧。

 通常情况下,一个开发语言的新版本都会保持向后兼容原来的老版本,但是在2000年,Python语言的创始人Guido van Rossum宣布,他将跨入一个新的Python版本,3.0版本将不会向后兼容。现在Python 3.0 RC候选版本已经发布,正式版本将在这个月月底发布。

开发者也许会无法接受语言新版本的用法和老的代码不兼容,但是对于Rossum来说,激进的升级是必要的。语言如果能用无数种方式做同一件事情,那么应该做的工作没有人真正做到了。 

3.0的发布是一个重要动作,Rossum说,这是要让python语言有更好的基础向前迈进。

Python 3.0 改变了什么? 

从某种意义来说,Python已经成为自身成功的受害者。Rossum说,“最初的想法中,Python的使用范围很小,我真的没有想到Python是如此成功,正在各种各样的应用中使用,从web应用编程到科学计算,以及所有的一切类型程序。” 

Van Rossum于1990年创建Python,作为一个开源,可扩展,高层次的语言,他还需要处理

]]>
http://quke.appspot.com/log-179.html
在Django中自定义Tag和Filter Django模板中的标签和过滤器使用起来很不错,可惜功能太少,还好可以自定义Tag和Filter;

现在就先看看自定义Tag的做法。

 这儿是一个自定义Tag的Demo:

  1. 创建工程和app。使用django-admin.py startproject DynamicNav命令创建一个名为DynamicNav的Django工程,然后使用manage.py startapp nav在DynamicNav目录中创建一个app。
  2. 创建目录。在DynamicNav目录中创建一个templates的目录,用来存入模板;在DynamicNav目录下创建一个medias的目录,用来存放静态文件;在DynamicNav/Nav目录下创建一个templatetags的目录,用来存放我们的自定义tag,同时在templatetags目录中创建一个名为__init__.py的文件,用来向Django说明这个目录存放的是源代码。
  3. 创建模板。在templates目录中创建一个nav.html的模板文件,在这个文件中只是简单的使用CSS+DIV实现了一个导航栏,CSS、DIV的相关知识大家可以去参考基它的文章。以下是该模板的源码:
]]>
http://quke.appspot.com/log-169.html
py2exe的使用方法  一、简介

py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序。

py2exe已经被用于创建wxPython,Tkinter,Pmw,PyGTK,pygame,win32com client和server,和其它的独立程序。py2exe是发布在开源许可证下的。
]]>
http://quke.appspot.com/log-149.html
手动制作python的exe可执行程序  1. 手动制作python的exe可执行程序 

Python没有内建一个编译为exe的功能。给python程序的部署带来不少的麻烦。 
 
所以就会出现一些py2exe之类的很不错的工具,用于自动把.py文件编译为.exe文件。 
 
最近抽空研究了一下手动实现类似py2exe的功能,希望加强对python的了解。 
 
结果还相当不错。把结果记录下来,与大家共享。 
 
 
1.1. 原理
文中所描述的方法,基于py
]]>
http://quke.appspot.com/log-148.html
Python中文全攻略 1. 在Python中使用中文
在Python中有两种默认的字符串:str和unicode。在Python中一定要注意区分“Unicode字符串”和“unicode对象”的区别。后面所有的“unicode字符串”指的都是python里的“unicode对象”。
事实上在Python中并没有“Unicode字符串”这样的东西,只有“unicode”对象。一个传统意义上的unicode字符串完全可以用str对象表示。只是这时候它仅仅是一个字节流,除非解码为unicode对象,没有任何实际的意义。
我们用“哈哈”在多个平台上测试,其中“哈”对应的]]>
http://quke.appspot.com/log-146.html
Django 1.0 正式发布     历时三年,Django 1.0终于发布了。到目前为止,在Django开发的历史上,这是一个里程碑一样的日子,它也是一群完美主义者可以值得骄傲的Web开发框架。作为一个开源项目,Django 1.0展示了三年多来社区的不懈努力,得到数百名开发人员的贡献,并且被翻译成五种语言;今天,五大洲从事各种开发工作的程序员们都在使用Django。

  Django首次发布是2005年7月,最初版本的Django其内部代码库版本号为8825。现在的1.0版本其公共代码库版本号为88xx,看起来社区的贡献已经逐步超越了内部人员了。
 
 
关于Django的兼容性
Django 1.0版本承诺AP
]]>
http://quke.appspot.com/log-141.html
Django框架在Google Appengine中使用的一点疑惑  + 

   听说大家期待了很久的Django 1.0版本已经在前不久正式发布了,不知GAE什么时候会更新,那是我们的应用是不是也要随之更新啊?

   今天说的问题是我现在用的0.96版本在Google Appengine使用碰到的事情。从前几个月开始在gae上做python开发就用Django了,一直感觉不过,最近在做文件下载时遇到了问题;

   场景:我要将数据库中的数据以

]]>
http://quke.appspot.com/log-140.html
Python 参考资料
  • Python简明手册;介绍了python的常用方法,使用方法,值得一看。地址:http://wiki.woodpecker.org.cn/moin/PyAbsolutelyZipManual
  • ]]>
    http://quke.appspot.com/log-138.html
    文章任意点截断获得摘要的解决办法。      一般情况下一篇网页形式的文章,它不仅是由看得见的文字和标点符号组成,还包含看不见的HTML代码,而HTML代码有自己的格式要求,有可能一点细小的错误都会在页面上造成巨大的差异。

         针对这个问题在做截取是,有人提出将在要中的html的代码全删除,只留文字,不要风格,我认为这样做不太好。因此要在保证截取后的摘要正常显示的情况下在任意点截断文章,我做了一下的几个步骤来处理,先找到需要成对出现而没成对出现的标签,然后补齐。

    1. 根据设定的长度截取一段字符串
    ]]>
    http://quke.appspot.com/log-12.html
    Django的内建过滤器stringformat的使用。 首先看stringformat在官方文档的说明:
        stringformat
        根据给定参数(一个格式字符串)格式化一个变量, 这个格式字符串使用 Python 字符串格式化语法, 例外之处是 "%" 运算符被省略
        参阅 http://docs.python.org/lib/typesseq-strings.html 以了解 Python 格式字符串

    我对这个过滤器的理解是可以将]]>
    http://quke.appspot.com/log-11.html
    eclipse中py文件字体大小更改
    window-->preference-->General-->Appearance-->Colors and Fonts

    改其中



    ]]>
    http://quke.appspot.com/log-52.html
    用eclipse+pydev在Google Appengine环境中做开发
    但是在在Google Appengine环境中开发是就老提示错误,不是服务器提示,而是eclipse提示”红叉“,看来是没有将google.appengine的api加到eclipse的pythonpath中。
    果然加上GAE环境,再重启就ok了。]]>
    http://quke.appspot.com/log-53.html
    Google Appengine中包和模块的一些问题      在Python中,
         将具有相似工具能的函数或类放在一个.py文件中,这一个文件我们认为是一个模块。
         我们将具有相似功能的模块放在一个文件夹里面,并且附带一个__init__.py文件,我们就认为这个文件夹为一个包;
         包由层级概念,他的层级级文件夹的层级关系,称为子包和父包。
    问题:
    1.顶级包问题;
    2.包调用问题;
    3.包结构的建议。
    下面我们以一个名为:“appid”的Google Appengine Python项目为例将问题说明一下:
    1.









    ]]>
    http://quke.appspot.com/log-54.html
    这几天学了Python。 http://www.supdo.net/thread-10-1-1.html
    现在在看Python的web框架Django。
    没想到我02年在学校时看过的cgi现在由要捡起来了。]]>
    http://quke.appspot.com/log-55.html