https://github.com/twtrubiks/drf-datatable-example-server-side
DataTables Example (server-side) - Python Django REST framework
https://github.com/twtrubiks/drf-datatable-example-server-side
datatables django django-rest-framework server-side
Last synced: about 1 year ago
JSON representation
DataTables Example (server-side) - Python Django REST framework
- Host: GitHub
- URL: https://github.com/twtrubiks/drf-datatable-example-server-side
- Owner: twtrubiks
- License: mit
- Created: 2017-05-13T09:28:01.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2019-08-28T11:00:17.000Z (almost 7 years ago)
- Last Synced: 2025-03-28T19:53:44.327Z (about 1 year ago)
- Topics: datatables, django, django-rest-framework, server-side
- Language: HTML
- Size: 2.05 MB
- Stars: 96
- Watchers: 7
- Forks: 40
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# DRF-dataTable-Example-server-side
此版本為 django<2.0,以及搭配 SQLite 的範例,
如果使用 Django>2.0,請參考 [django_2_and_mysql_5.7 branch](https://github.com/twtrubiks/DRF-dataTable-Example-server-side/tree/django_2_and_mysql_5.7)
DataTables Example (server-side) - Python Django REST framework
* [Youtube Demo](https://youtu.be/E0Pf5Ci-vGw) - 建議看影片的 demo 說明
DataTables (server-side) 搭配 [Django REST framework](http://www.django-rest-framework.org/) 簡單範例 📝
## 特色
* 使用 [Django REST framework](http://www.django-rest-framework.org/) 建立API。
* 搭配 [DataTables]( https://datatables.net/ ) 並且使用 [server-side]( https://datatables.net/manual/server-side ) 增加使用者體驗。
* 搭配 Bootstrap 。
* 搭配 SQLite ( 10萬筆模擬資料 )。
## 安裝套件
請在你的命令提示字元 (cmd ) 底下輸入
安裝 [Django](https://github.com/django/django)
這邊請注意,django<2.0 ( django 請安裝小於 2.0 的版本)
>pip install Django==1.11.20
安裝 [Django-REST-framework](http://www.django-rest-framework.org/)
>pip install djangorestframework
安裝 [django-model-utils](https://django-model-utils.readthedocs.io/en/latest/index.html)
>pip install django-model-utils
或是使用 cmd (命令提示字元)
```cmd
pip install -r requirements.txt
```
## 說明
* LOG 資訊非常重要,可以參考官網 [django logging](https://docs.djangoproject.com/en/1.11/topics/logging/) , 或是看範例裡面的 [settings.py](https://github.com/twtrubiks/DRF-dataTable-Example-server-side/blob/master/drf_table_ex/settings.py) 裡面的 LOGGING。
* 建議透過 [django-db-backends](https://docs.djangoproject.com/en/1.11/topics/logging/#django-db-backends) 來觀看目前的 orm 到底執行了什麼 SQL 指令,可以到範例裡面的 [settings.py](https://github.com/twtrubiks/DRF-dataTable-Example-server-side/blob/master/drf_table_ex/settings.py) 找 django.db.backends。
## 執行方法
使用命令提示字元 ( cmd ) 輸入下方指令
> python manage.py runserver
然後瀏覽
[http://127.0.0.1:8000/index/](http://127.0.0.1:8000/index/)
## 執行畫面
### 首頁
#### [Get] api/music/{額外 DataTables 參數}

### 新增
#### [POST] api/music/

### 編輯
#### [PUT] api/music/{id}/

### 刪除
#### [DELETE] api/music/{id}/

### 搜尋 排序
#### [Get] api/music/{ 額外 DataTables 參數 }

## 後記
* 從影片中的 demo 可以很明顯的看出當資料量很大(5 萬筆)的時候,如果沒有用 server-side 的方式,而是一次全部載入,使用者體驗非常差。
* 本範例前後端並沒有分離,而是寫在一起,比較好的方式,應該是前後端分離。
* api document 可參考 [api_document.html](https://github.com/twtrubiks/DRF-dataTable-Example-server-side/blob/master/api_document.html) ,直接用瀏覽器開啟即可。 ( 文件教學可參考 [aglio_tutorial](https://github.com/twtrubiks/aglio_tutorial) )

## 更換 MySQL 資料庫
因為有些人反映換成 MySQL 之後無法 work,所以我測試了一下,
步驟一,先要多安裝兩個套件,
安裝 PyMySQL
```cmd
pip install PyMySQL
```
安裝 mysqlclient
```cmd
pip install mysqlclient
```
( 這個有可能安裝不起來,我自己最後是去找 mysqlclient-1.4.2-cp36-cp36m-win32.whl 安裝成功 )
[settings.py](https://github.com/twtrubiks/DRF-dataTable-Example-server-side/blob/master/drf_table_ex/settings.py#L84) 要改成
```python
......
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'demo',
'USER': 'root',
'PASSWORD': 'password123',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
......
```
也可參考之前的文章 [Django 如何連結 MySQL](https://github.com/twtrubiks/django-transactions-tutorial#django-%E5%A6%82%E4%BD%95%E9%80%A3%E7%B5%90-mysql),
這邊要特別注意,MySQL 我使用 5.7,如果使用 MySQL 8.0,會遇到 django.db.utils.OperationalError: (2059, )
的問題,原因是 MySQL 8.0 的密碼加密方式改成了 caching_sha2_password,要再自行修改,簡單一點就是使用
MySQL 5.7。
## 執行環境
* Python 3.6.6
## Reference
* [Django REST framework](http://www.django-rest-framework.org/)
* [DataTables]( https://datatables.net/ )
* [Bootstrap]( http://getbootstrap.com/ )
* [django-model-utils](https://django-model-utils.readthedocs.io/en/latest/index.html)
## Donation
文章都是我自己研究內化後原創,如果有幫助到您,也想鼓勵我的話,歡迎請我喝一杯咖啡:laughing:

[贊助者付款](https://payment.opay.tw/Broadcaster/Donate/9E47FDEF85ABE383A0F5FC6A218606F8)
## License
MIT license