Skip to content. | Skip to navigation

Personal tools

Navigation

You are here: Home / Tips / Django Tips

Django Tips

Instagram 擁有 30億註冊用戶,已超過 32bit int 限額,都沒問題。客製化工作包括: 讓 Models 支援 Sharding,手動關閉 Garbage Collection 來提昇記憶體管理效率,在各處資料中心部署整套系統。效能改善策略包括: 開發工具來調整效能調校,使用 C/C++ 重寫部份組件,使用 Cython, asyncio。昇級到 Python3 的策略,是讓 code base 同時相容 2 和 3 拒絕引入不相容 3 的函式庫,除去不再使用的函式庫,替換不相容的函式庫。昇級過程要處理 Unicode 問題,利用 ensure_str(), ensure_binary(), ensure_text() 來檢查,要處理 pickle 的差異,利用不同 namespace 來區隔,要處理 Iterator 內容只被造訪一次的問題,轉換成 List 可改善,要處理 Dictionary 順序問題,利用 sort_keys=True 來改善。

basic folder structure 共用 Model 的變通方式 use_for_related_fields 的運作原理 REST API DataTables

Youtube Example REST with React

Visual Web Designer HTML5 Boilerplate

Python From Scratch - Create a Dynamic Website

API + Dashboard: Throughput (RPM), Cache

Convert Django QuerySet to Pandas DataFrame in 跟 contains 無法併存

args = functools.reduce(operator.or_,(Q(name__icontains=i) for i in pattern))
queryset.filter(args)

django-channels 會處理 WebSockets 和 HTTP2 在內的內容,建立背景運算之類的功能,但要注意 asgi 和 wsgi 分開服務,以及資料上傳量。

channels example tutorial channels2

Wagtail

Wagtail: How to Make Your Own Content Type Model #1 PostGIS Real Estate: OpenIMOB

$ sudo apt-get install libjpeg-dev zlib1g-dev python-pip python-virtualenv python-pil
# Python3: python3-pip python3-virtualenv python3-pil
$ virtualenv py2env
# Python3: virtualenv -p python3 py3env
$ cd pyNenv $ source bin/activate $ pip install wagtail ... Successfully installed Django-1.10.2 Pillow-3.4.1 Unidecode-0.4.19 Willow-0.3.1 beautifulsoup4-4.5.1 django-modelcluster-2.0 django-taggit-0.18.3 django-treebeard-4.0.1 djangorestframework-3.4.7 html5lib-0.999999 pytz-2016.7 six-1.10.0 wagtail-1.6.3 $ wagtail start mysite Creating a Wagtail project called mysite Success! mysite has been created $ cd mysite $ pip install -r requirements.txt $ python manage.py migrate $ python manage.py createsuperuser $ python manage.py runserver $ vi home/models.py $ python manage.py makemigrations $ python manage.py migrate $ vi home/templates/home/home_page.html

啟動 ElasticSearch 服務後,就可以安裝 Python Client 並設定整合:

$ pip install elasticsearch
$ vi mysite/settings/base.py
WAGTAILSEARCH_BACKENDS = {
    'default': {
        'BACKEND': 'wagtail.wagtailsearch.backends.elasticsearch',
        'URLS': ['http://localhost:9200'],
        'INDEX': 'wagtail',
        'TIMEOUT': 5,
    }
}
$ python manage.py update_index
Updating backend: default
default: Rebuilding index wagtail
default: home.HomePage             .
default: wagtaildocs.Document      
default: wagtailimages.Image       
default: wagtailcore.Page          .
default: indexed 2 objects

demo: pyconau code

ecommerce: snipcart

Deploying Wagtail to Heroku: SECRET_KEY

Arches

專為文化資產維護設計的系統,內含專業分類與流程模組。透過 Roadmap 了解主要特色。