Wongnai ก็ใช้ Django ด้วยนะ
อย่างที่พอทราบกันว่า Wongnai นั้นเราเป็น Java Servlet มาตั้งแต่ต้น และตอนหลังเราก็เปลี่ยนมาเป็น React ตอนนี้ Wongnai เรากำลังจะเริ่มมีภาษาที่ 3 แล้วครับ นั่นคือ Python และ Django Framework
ทำไมต้องเพิ่มภาษาที่ 3?
ปัญหาของการทำ microservice ที่เราเจอคือการทำหน้า admin ซึ่งเดิมใน Wongnai นั้นเรามีระบบ admin หลังบ้านอยู่แล้ว แต่ใน service ใหม่ๆ จะไม่มี web interface แล้ว (ใช้ React เป็น frontend ตัวเดียว) ซึ่งเราก็เลยต้องทำ generic admin ขึ้นมา โดยเลือกใช้ Admin-on-rest บวกกับ annotation ในฝั่ง Java
แต่พอใน project ถัดมา เราก็พบว่าปัญหาคือการจะขึ้น microservice ได้นั้น frontend คนเดียวจบงานไม่ได้ ต้องรอ backend ทำด้วย เลยต้องมองหา solution backend ใหม่ที่จบได้ไว ง่ายๆ frontend ทำได้ (ในกรณีที่ไม่ใช่ project ใหญ่) ซึ่งผมเองก็เขียน Django นอกเวลางานอยู่แล้ว ก็เลยลองเอามา pitch ให้ทีมดู
Batteries Included
แฟนๆ Django คงน่าจะทราบดีว่า Django admin นั้นใช้ง่ายและทรงพลังแค่ไหน ซึ่งตอน pitch ก็ไม่ยากเลย ผมก็เปิดโค้ดหลังบ้านให้ดูว่ามันแทบจะเป็นการกำหนด attribute ของ class หมดเลย
หลังจากนั้นแล้วก็จะได้หน้า admin สวยๆ แบบนี้
REST that you can rest
อีกจุดขายหนึ่งของ Django คือ REST Framework ที่ทำให้การทำ API เป็นเรื่องง่ายมากๆ เพราะเค้าเตรียม class ที่ครอบคลุมการใช้งานหลักๆ มาให้แล้ว เราแค่กำหนดค่าก็ใช้งานได้เลย
First to Launch
Project แรกของเราที่เลือก Django เข้ามานั้นก็เป็นโปรเจกท์ของน้อง Thongrapee Panyapatiphan น้องฝึกงานที่ทำหน้า Careers ของเราให้ใหม่จากความต้องการของทีม People โดยเราต้องการให้น้องสามารถทำจนจบได้คนเดียวเลย ซึ่ง Stack ที่เราเลือกใช้คือ
- Frontend: NextJS, React (อันนี้เพราะเราอยากลอง NextJS ดูด้วย)
- Backend: Django, Django REST Framework, Gunicorn
- CDN: CloudFlare (เนื่องจากเราใช้ WhiteNoise serve static ก็เลยจะต้องตั้งค่า CloudFlare ให้ cache static file ไว้ด้วย จะได้ไม่เป็นภาระของ server)
ซึ่ง project นี้น้องสามารถจบงานได้เองภายใน 1 เดือน และ Django เองก็ไม่ใช่คอขวดในการทำงานเท่าไร เพราะพอขึ้น API ได้แล้วก็จะเหลือแค่ปรับ admin ให้ตรงกับความต้องการของผู้ใช้งาน
น้องบอกว่า Django documentation เขียนไว้ดีมากๆ และมีโค้ดให้ดูใน GitHub ด้วย
Feedbacks
Feedback จาก project นี้ค่อนข้างดีครับ ระบบหลังบ้านช่วยลดเวลาทำงานของทีม People ได้เยอะ (เดิมทีเราไม่มี resource จากทีม Dev มาทำหน้า Careers เลยใช้เครื่องมืออย่าง Unbounce ที่สามารถสร้างหน้าเว็บแบบง่ายๆ ได้ แต่การจัดข้อความให้ดูดีทำได้ลำบากมาก เพิ่มตำแหน่งครั้งนึงใช้เวลาเกิน 15 นาที) นอกจากนี้ Django Admin ยังใช้งานได้สะดวก ไม่ต้อง train การใช้งานเลย
สำหรับในด้าน DevOps นั้น default settings ของ Django จะต้องแก้อยู่พอสมควร ถึงจะใช้งานกับ Docker ได้ ซึ่งผมก็มีของก้นกรุที่เก็บไว้และใช้ต่อๆ กันมาอยู่ แต่ตอนนี้คงจะแนะนำให้ใช้ cookiecutter-django แทนเพราะมีให้พร้อมจนถึง Dockerfile และ Docker Compose และไม่ต่างกับของที่ผมเก็บไว้อยู่เท่าไร
แนะนำหนังสือ
สุดท้ายอยากแนะนำหนังสือ Two Scoops of Django 1.11 ครับ เล่มนี้ไม่ได้สอนพื้นฐาน Django แต่จะแนะนำ Best Practice ต่างๆ ที่ควรทราบ ถ้าจะเขียน Django ใน production ควรอ่านเล่มนี้สักรอบก่อน
นอกจากนี้ผมพบว่ามันใช้อ้างอิงเวลามีคำถามจากคนในทีมได้ดีเลยทีเดียว
สามารถซื้อ PDF ได้จากหน้าเว็บของผู้แต่ง หรือสั่งซื้อจาก Amazon ก็ได้ครับ