GAE 在開發時, 遇到的一些問題與解法, 在此篇做些紀錄.
問題1
- GAE 的 影像處理 API 是使用 "Python 影像處理函式庫 - PIL", 系統要裝哪些東西? 要如何測試系統是否有此套件?
回答1
安裝 PIL
- apt-get install python-imaging # python-imaging - Python Imaging Library
測試
- python -c 'import PIL' 沒錯誤訊息即可.
問題2
- Python 的 urldecode(), html 轉換 有哪些 Function 可以用?
回答2
urlencode() 是用 unquote(), 如下 Function.
def urldecode(param):
return unquote(param)
html 轉換 (同 htmlspecialchars())
import cgi
cgi.escape('<html>')
問題3
- 於 command line 的 urldecode 轉換操作?
回答3
>>> a = u'css%E5%9C%93%E8%A7%92'
>>> print urllib.unquote(a.encode('utf-8'))
css圓角
>>> print urllib.unquote(a.decode('utf-8'))
cssåè§
問題4
- print k # [u'css%E5%9C%93%E8%A7%92']
- k.pop().encode('utf-8') # 出現錯誤: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 3: ordinal not in range(128)
回答4
使用 sys.setdefaultencoding('utf8') 設為 utf8 即可.
import sys
sys.setdefaultencoding('utf8') # 把 str 編碼由 ascii 改為 utf8 (或 gb18030)
print urllib.unquote(k.pop().encode('utf-8')) # [u'css%E5%9C%93%E8%A7%92'] = css 圓角
嚴謹點的 UTF-8 設定方式.
code = sys.getdefaultencoding()
if code != 'utf8':
reload(sys)
sys.setdefaultencoding('utf8')
問題5
- Python json encode, decode 要如何寫?
回答5
json 要可以使用 simplejson.
from django.utils import simplejson as json
# encode
json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
# decode
json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
問題6
- 要單獨取出 timesince (幾分鐘前) 的 Library 來使用, 要如何取用?
回答6
下述需 import template, 不然會出現 Environment variable DJANGO_SETTINGS_MODULE is undefined. 的錯誤.
from google.appengine.ext.webapp import template
from django.utils.timesince import timesince
timesince(v.created) # 秀出幾分鐘前
timesince(datetime.datetime.now()) # 秀出幾分鐘前
問題7
- GAE 資料儲存(存入 DB), 要確保存入 UTF-8, 建議如何寫?
回答7
- 詳見: GAE 實體和模型
- DB Save 建議: outthing.memo = db.Text(memo, 'utf-8')
問題8
- 有建議 Python IDE 使用哪套嗎?
回答8
- 詳見: Python IDE 比較與推薦 - 個人還是推薦 Vim.
問題9
- GAE 的預設網域名稱?
回答9
- *.appspot.com