“祥”龍第一掌:
from __future__ import unicode_literals
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
遠離 b'str' u'str'真是煩了 unicode_literals簡單方便
“祥”龍第二掌:
django.utils.encoding.smart_bytes django.utils.encoding.force_text django.utils.encoding.smart_text
也不知道創造這些神功的大神砸咋么niuB
“祥”龍第三掌:
__unicode__ ==>NO==Use==>__str__
就是實體類不用__unicode__ 用__str__
“祥”龍第四掌:
from django.utils.six import iteritems
oh why?下面多清晰 因為3.4 的dict沒有 很多方法了撒
Python 3.4
>>> a={}
>>> dir(a)
[... 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
Python 2.7.10 (default, Jul 14 2015, 19:46:27)
>>> a={}
>>> dir(a)
[...'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues']
“祥”龍第五掌:
在捕獲異常的時候使用as
try:
article = NewsArticle.objects.get(slug="hello-world")
except NewsArticle.DoesNotExist as exc:
pass
except NewsArticle.MultipleObjectsReturned as exc:
pass”
“祥”龍第六掌:
檢查變量的類型使用
from django.utils import six isinstance(val, six.string_types) # previously basestring isinstance(val, six.text_type) # previously unicode isinstance(val, bytes) # previously str isinstance(val, six.integer_types) # previously (int, long)
“祥”龍第七掌:
使用range替代xrange
from django.utils.six.moves import range
for i in range(1, 11):
print(i)”
“祥”龍第八掌:
弄清楚python的版本
from django.utils import six
if six.PY2:
print("Python2")
if six.PY3:
print("Python3")
