ทดลอง django

posted on 31 Jan 2008 15:05 by wonam in softdev

นิสิตมาขออาจารย์อีกท่านให้สอนวิชาแล็บพิเศษ เกี่ยวกับ unix และอื่น ๆ ก็เลยตกลงกันว่าจะสอนพวก web framework ไปด้วย อาทิตย์นี้อาจารย์ผู้ดูแลวิชาได้สอน python ไปแล้ว (ซึ่งก็เป็นภาษาที่ผมชอบมากเช่นกัน) ผมเลยบอกว่างั้นจะใช้ django สอน web framework

เมื่อได้ข้อตกลงดังกล่าว ผมก็ถือโอกาสเป็นการทดลองเล่น django อย่างจริง ๆ จัง ๆ เสียที หลังจากที่ทดลองแบบนิด ๆ หน่อย ๆ (ทำ tutorial ได้แค่ 2 ตอน) ไปแล้ว

คราวนี้ที่ได้ทดลองก็คือทำ tutorial แล้วก็อ่าน djangobook

จากที่ได้แตะ ๆ มาประมาณ 1 วัน ก็มีข้อให้เกิดความลำบากเล็กน้อย น่าจะเกิดจากความไม่เคยชิน (รวมถึงอาจจะเกิดจากการถูกตามใจด้วย Rails มานานก็ได้)

แน่นอนว่าความเห็นของคนลอง 1 วัน ย่อมไม่สามารถบอกอะไรได้เท่าใดนัก ถ้ามีผู้เชี่ยวชาญอยู่แถบนี้ คงต้องรบกวนให้ข้อแนะนำด้วยนะครับ

สรุปคร่าว ๆ ได้ดังนี้ (ไล่ตามเรื่องที่คิดว่าสำคัญ/ทำให้ลำบากมากสุด)

1. django ไม่มีระบบ migration ในตัว. กล่าวคือ เราเขียน model แล้วเรียก syncdb ให้สร้างฐานข้อมูลให้ แต่ถ้าเราแก้ไข หรือปรับปรุง ในเอกสาร (djangobook บทที่ 5) บอกให้ไปสั่ง sql ALTER TABLE เอง (โดย django สามารถสร้าง sql command บางส่วนให้ได้) แต่ปัญหานี้น่าจะหมดไปได้เพราะว่า project เช่น django-evolution, db-migration อ่านเพิ่มที่หน้า wiki page

2 ระบบ template ที่ไม่ใช่ embedded python. อันนี้เป็นการออกแบบของทาง django เอง ที่จะทำให้การเขียน template ของหน้าเว็บนั้น ไม่ใช่ python เนื่องจากต้องการให้ใช้ง่ายกับคนที่ไม่ได้เขียน python และต้องการบังคับให้แยก code การทำงานออกจาก code การแสดงผล (หลักการออกแบบ: loose coupling) อย่างไรก็ตาม ทางเลือกนี้ทำให้ผู้เริ่มหัดใช้ต้องเรียนอะไรเพิ่มขึ้น เช่นคำสั่ง tag หรือลำดับการค้นค่ามาแสดง

3 การที่ต้อง map url ไปหา function เอง ด้วย regular expression. อันนี้เป็นความเคยชิน (โดนตามใจจนเสียคน) มาจาก rails โดยแท้ ทางผู้พัฒนา django ได้ให้เหตุผลว่าในโครงการใหญ่ ๆ การที่จะ map url ไปหา code โดยตรงเลย จะทำให้เกิดความยุ่งยากในการจัดการ ซึ่งผมก็เห็นด้วยอยู่มากทีเดียว

การที่ django เน้นว่า 'no magic' (เค้าใช้คำนี้จริง ๆ ดูจาก djangobook บท 3) แล้วเปิดขั้นตอนภายในให้เห็นนั้นผมคิดว่าเป็นทางเลือกที่ดี อย่างไรก็ตาม ผมคิดว่าสำหรับผมแล้ว convention over configuration ของ Rails ดูจะถูกใจคนเริ่มต้นมากกว่า

4 หน้า Admin ของ django. จริง ๆ แล้วตรงนี้เป็นจุดขายทีเดียว เพราะว่ามีลักษณะคล้ายคลึงกับ ดูจะเหนือกว่า scaffold มาตรฐาน ของ Rails นั่นคือ ไม่ต้องทำไร ได้ของใช้เลย แถมดีอีกต่างหาก และคาดว่ายังมีการจัดการเกี่ยวกับ user และสิทธิการเข้าใช้ได้ด้วย อย่างไรก็ตาม เนื่องจากมัน config ได้มาก ทำโน่นทำนี่ได้เยอะ (เท่าที่ลองจาก tutorial) เลยทำให้ถ้าผมจะเขียนโดยไม่ใช้หน้าดังกล่าวก็จะรู้สึกเสียดาย แต่ถ้าจะใช้ ก็รู้สึกว่าต้องไปนั่นอ่าน/ทดลองอีกเยอะ แล้วมันก็ค่อนข้างจะ "มหัศจรรย์" เกินไป

จริง ๆ ใน Rails ผมก็ชอบ scaffold แต่ในรุ่นเก่า พอเรา generate มันออกมาเป็น code จริง ๆ ก็ดูง่ายและสามารถเขียนต่อเติมได้ทันที ในรุ่นใหม่ที่ generate scaffold ได้กับ resource ได้ code ที่ทำงานได้ทั้งในกรณีที่เป็นเว็บและเป็น web service แบบ REST นั่นผมก็ยังรู้สึกว่ามันมากเกินไป ทำให้คนหัดเรียนจะอ่านก็ลำบากเช่นเดียวกัน

ข้อดีที่ผมชอบอย่างมาก (มากกว่าใน Rails) ก็คือการที่เราระบุข้อมูลใน model (เช่น field ต่าง ๆ) ใน model code เลย ซึ่งในกรณีของ Rails นั้น มันดันไปอยู่ใน Migration (เป็น code ส่วนจัดการกับการสร้าง/ปรับปรุง table) ส่วนใน model ก็จะมีแต่ code ที่ใช้จัดการเพิ่มเติมเท่านั้น ทำให้เวลาดู code อย่างเดียวไม่พอ ต้องไปเปิด migration ดู แถม migration ดันเรียงตามเวลา ทำให้ดูลำบาก

สุดท้ายก็ต้องย้ำอีกทีว่า เป็นความเห็นของคนที่ลองมาได้ 1 วัน เมื่อได้ทดลองอะไรมากขึ้นคงเปลี่ยนความเห็นไปได้ (และอาจมาเขียนใหม่)

(และขอรบกวนผู้รู้แนะนำด้วยนะครับ ขอบคุณครับ)

(สีน้ำเงินเป็นส่วน update )

Comment

Comment:

Tweet

มุมกลับกัน ผมว่า django ง่ายกำลังดี และไม่ต้องเรียนรู้มากจนเกินงามเหมือนกัน TurboGEAR ครับ

#9 By Z-MAN (58.8.174.213) on 2009-10-29 11:47

น่าสนใจมากเลย

#8 By ฟรีเกมส์ (61.19.67.105) on 2009-05-21 01:05

เค้าว่ากันว่า Django ยังเหมาะกับการเขียน CMS หรืออะไรเทือกนั้นมากกว่าจะใช้เขียน RIA ในรูปแบบอื่นๆ

ถ้าจะพูดถึง RIA ที่กินความหมายกว้างกว่า CMS ว่ากันว่า Turbogears ทำได้ดีกว่าพอสมควร

#7 By BLeAm (124.121.226.216) on 2008-02-07 08:30

ไปลงชื่อไว้ที่ djangopeople.net ด้วยก็ดีนะครับ

#6 By pittaya (58.8.83.251) on 2008-02-01 23:36

django ยังไม่สมบูรณ์พอสำหรับ production แค่พอใช้ได้ ยังทำเรื่องพิสดารได้ไม่มาก

#5 By sugree (158.108.213.82) on 2008-02-01 15:05

ผมคิดไปคิดมาชักไม่แน่ใจว่าผมเข้าใจ loose couple หรือเปล่า sad smile

#4 By veer on 2008-02-01 11:30

อ. ผมยังไม่ได้ฝึกท่า php cake เลยอะ

#3 By จอร์จ (58.8.119.202) on 2008-02-01 08:26

แบบ Zope งี้ดู feature แล้วตื่นเต้นมาก แต่อ่าน manual แล้วผมก็เลิกไปแบบเศร้า sad smile

#2 By veer on 2008-01-31 20:35

1. สำหรับ migrate ใช้ sqlalchemy-migration ได้เปล่าครับ? http://code.google.com/p/sqlalchemy-migrate/ ... ผมไม่แน่ใจว่า Django ใช้ sqlalchemy หรือเปล่า?

2. แม้แต่ Turbogears ก็ไม่ใช้ PSP (Python server page). ทั้ง Cheetah, KID และ Genshi นี่ภาษาแปลกไปหมดเลย. Template ของ Django อาจจะแบบ loose couple ขนาดกำลังดี คือมันไม่ค่อย loose เท่าไหร่. เอาไปเปิดใน Dreamweaver ก็คงเจ๊งอยู่ดี? (เวลาทำจริงๆมีคนใช้ Dreamweaver หรือ Komposer แก้ template หรือเปล่า?)

3. คงคล้ายกับ Route ใน CakePHP. ใน CakePHP ก็ configuration มาให้อย่างหนึ่งเลย แล้วถ้าไม่พอใจก็มาแก้ทีหลังได้ ใส่พวก * ได้ (ดูผ่านๆจากตัวอย่าง ... ผมยังไม่เคยมาแก้เลย). ถึงใช้ regular expression ก็น่าจะมี default configuration ก่อนแล้วค่อยแก้ทีหลังได้? ... ไม่รู้ว่าต้อง site ใหญ่แค่ไหนถึงจะอยากมาแก้ map เอง.

4. อยากลองครับเรื่อง Admin นี่น่าสนใจดี แต่ยังอ่าน tutorial ไม่เข้าใจซะที. ผมไม่ตลก sit-in ได้ปะครับ

question

#1 By veer on 2008-01-31 20:23