django在pyhton2.7 和 python3.* 之間代碼和睦相處的方法


“祥”龍第一掌:

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")

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM