Django 101 Ep.2 Why using Django ?ทำไมถึงต้องใช้ Django
หลังจากที่บทความที่แล้วเป็นการสอนการสร้างโปรเจคท์และเซ็ต Virtual Environment ให้กับโปรเจคท์ของเรากันแล้ว ผมจะขอย้อนกลับไปซักหน่อย เพื่อทบทวนและให้มีแรงบันดาลใจ ทำไมถึงต้องใช้ Django ในการเขียนโปรแกรมเพื่อพัฒนาเว็บไซต์หรือเว็บแอปพลิเคชัน เมื่อเรารู้ศักยภาพของตัวเฟรมเวิร์คนี้กันแล้ว เราจะมีแรงฮึกเหิมในการเขียนต่อไปนั่นเอง
“The Web framework for perfectionists with deadline”
จาก quote ด้านบน คือคำนิยามสั้น ๆ แต่เต็มไปด้วยรายละเอียดมากมาย ผมจะอธิบายให้ฟังดังเนื้อหาในบทความด้านล่าง
…
Why Django ?
Rapid Development
ทำไมถึงสามารถพัฒนาและสร้าง Prototype ได้อย่างรวดเร็ว ลองไปอ่านเหตุผลด้านล่างได้เลยครับ
MVC (MTV: Model, Template, View)
MVC(Model, View, Controller) เป็น Software Design Pattern ของการพัฒนา User Interface หรือเว็บต่าง ๆ แต่ในส่วนของ Django จะเรียกต่างกันนิดหน่อย นั่นก็คือ MTV(Model, Template, View) ดังนั้นจึงทำให้การพัฒนาเว็บเป็นมาตรฐานและมั่นใจได้ว่า เราไม่ได้แตกแถวและหลุดโลกออกไปเด็ดขาด แต่ก็จะเพิ่มฟีเจอร์เด็ด ๆ ที่เฟรมเวิร์คตัวอื่นไม่มี ยิ่งคนที่มีพื้นฐาน MVC จากเฟรมเวิร์คอื่น ๆ ที่มาจากภาษา PHP, Java, C#, etc ด้วยแล้ว ยิ่งจะสามารถทำความเข้าใจได้ไม่ยาก หรือเมื่อศึกษา Django แล้วอยากต่อยอดไปเขียนภาษาอื่นที่เป็น MVC เหมือนกันก็สามารถทำได้รวดเร็วกว่าปกติ เพราะว่ารู้คอนเซ็ปต์แล้วนั่นเอง
ส่วน MTV คืออะไร เดี๋ยวรอติดตามกันในบทความถัดไปนะครับ กับบทความ Django 101 Ep.3 Django Design Pattern, Model, Template, View(MTV)
Reusable Code
โดยโค้ดที่เราสามารถเขียนไว้ในแอพหนึ่งสามารถที่จะนำแอพนั้นมาประยุกต์ใช้ในโปรเจคท์ต่อไปได้เลย เพราะว่า Django แบ่งโครงสร้างโดยตัวแอพหลาย ๆ แอพซึ่งมีฟีเจอร์ที่แตกต่างกันไปจะถูกรวมเข้าไว้หรือเก็บไว้ในโปรเจคท์อีกที เช่นถ้าเราเขียนแอพที่เป็นหน้า Authentication Systems แยกไว้ใน App 2 (ดังภาพด้านล่าง เราสามารถเลือกแอพเพื่อที่จะประยุกต์ใช้ในโปรเจคท์ต่อไปได้) เราก็สามารถก็อปปี้แล้วนำแอพนี้อิมพอร์ตไปใช้ในโปรเจคท์ต่อไปได้เลย แต่ก็อาจจะต้องมีการปรับแก้ในส่วนของ URL และ Template บ้าง แต่แน่นอนว่านี่ไม่ใช่ปัญหาอะไร
ส่วนการจัดวางโฟลเดอร์และไฟล์ต่าง ๆ คือทำได้อย่างไร เดี๋ยวรอติดตามกันในบทความถัดไปนะครับ กับบทความ Django 101 Ep.4 Directories and Files Structures
Django ORM
ปกติถ้าเราจะต้องติดต่อกับตัว Database หรือสร้างโมเดลขึ้นมา จำเป็นต้องเขียนภาษา SQL เข้าไปตรง ๆ ใช่ไหมครับ แต่สำหรับ Django ไม่ใช่ ซึ่ง Django นั้นมีตัว ORM(Object Relational Mapper) หรือที่เรียกว่า Django ORM ที่มากับ Django โดยตัว ORM นั้นจะช่วยลดการเรียนรู้ SQL ของเราลงไปได้ ทำให้เรียกได้ว่าเป็นการเขียนที่เป็น Pythonic Way มากกว่า เพราะถ้าสังเกตจากตัวอย่างภาพด้านลาง ซึ่งตัวด้านบนจะใช้ SQL ในการเขียนเพื่อสร้างตารางขึ้นมาตารางหนึ่ง แต่สำหรับ ORM นั้นจะเห็นได้ว่าเป็นการเขียนในทางของภาษาไพธอนกันเลยทีเดียวเพราะถ้าลองสังเกต ให้ดีจะพบว่า มี class, object เหมือนกับเขียนไพธอน ดังนั้นทำไมเขาจึงเรียกว่า Pythonic Way ก็ด้วยเหตุผลนี้แหละครับ
Built-in Admin Site and Authentication Systems
อีกหนึ่งไฮไลท์สำคัญที่เรียกได้ว่าเป็น Core Feature ของตัว Django เลยก็ว่าได้นั้นก็คือหน้าแอดมินที่มีมาให้พร้อมใน Django ที่เราเรียกว่า Built-in Admin ลองจินตนาการดูว่า ถ้าในตัวภาษาหรือเฟรมเวิร์คอื่น ๆ ต้องใช้เวลาไปกันการเขียนหรือพัฒนาส่วนนี้นานแค่ไหน ซึ่งเท่าที่ศึกษาและค้นหาข้อมูลมายังไม่เคยเห็นตัวไหนที่มีหน้าแอดมินมาให้สมบูรณ์แบบพร้อมในการทำเป็นตัว Prototype เพื่อทดสอบโมเดลต่าง ๆ ที่เราร่างเอาไว้ และ Django น่าจะเป็นเฟรมเวิร์คที่สามารถสร้างตัว Prototype ได้ไวที่สุดแล้วครับ
นอกจากนี้ Django ยังมี Built-in Authentication Systems ในตัว ดังนั้นแทบจะไม่ต้องเขียนขึ้นมาใหม่เอง หรือไปเรียกใช้งานเสริมจากไลบรารี่ภายนอกเลย การทำระบบ Log in, Log out หรือ Permissions ต่าง ๆ กลายเป็นเรื่องที่สามารถทำได้สะดวก รวดเร็ว ครบ จบใน Django
Popular and Large Community Support
แน่นอนว่า Django เป็นหนึ่งในเฟรมเวิร์คที่มีชื่อเสียงและได้รับความนิยมมากที่สุดเฟรมเวิร์คหนึ่งของไพธอน ดังนั้นจึงมีคนมาก ๆ ทั่วโลกที่ได้ศึกษามาก่อนหน้าเรา และกำลังเรียนรู้ไปพร้อม ๆ กันกับเรา ไม่ต้องสงสัยเลยว่ามีบทความ Tutorials เกี่ยวกับ Django มากมายบนแพลตฟอร์มต่าง ๆ ไม่ว่าจะเป็นเว็บไซต์ต่าง ๆ ใน Medium, Youtube, Stackoverflow, GitHub หรือแม้กระทั่งในกลุ่มเฟสบุ๊คเองก็ยังมีคอมมิวนิตี้ที่พร้อมให้ความช่วยเหลือเราได้ตลอดเวลาเมื่อติดปัญหาตรงส่วนไหน เช่นโค้ดเออเร่อ โค้ดรันไม่ผ่าน ตัว Facebook Group น่าจะเป็นหนึ่งในหนทางที่รวดเร็วที่สุดในการขอความช่วยเหลือ แต่พึงระลึกไว้เสมอว่า “การตั้งคำถามที่ดีมีชัยไปกว่าครึ่ง” ดังนั้นควรทำการบ้านมาให้ดีก่อนตั้งคำถาม ไม่ใช่หว่านแห มีการเขียนโค้ดและหาทางแก้ไขปัญหานั้นด้วยตัวเองก่อน เมื่อลองจนสุดทางแล้วไม่ได้ ค่อยไปถามในกลุ่ม อันนี้เป็นการแสดงถึงความพยายามของเรา และถือว่าเป็นการให้เกียรติผู้ที่จะเข้ามาตอบด้วย และเมื่อเราลองด้วยตัวเองก่อน เราก็จะสามารถอธิบายปัญหาและสามารถตั้งคำถามได้อย่างตรงจุดนั่นเอง หรือแม้แต่ stackoverflow ที่เรียกได้ว่าเป็นหนึ่งในครูของเหล่าโปรแกรมเมอร์อย่างแท้จริง ก็มีคำถามที่โปรแกรมเมอร์อื่นที่เคยเจอปัญหาเหมือนกันกับเรา แล้วเอาไปโพสต์ คำถามก็จะยังอยู่ในแพลตฟอร์มนั้น ซึ่งส่วนใหญ่ก็มีคนถามไว้หมดแล้ว เราก็แค่ก็อปปี้เออเร่อแล้วไปค้นหา เพื่อหาแนวทางแก้ไขต่อไปได้ทันที
ส่วนจะ Popular ยังไง ผมจะลองทำการทดสอบโดยการพิมพ์เข้าไปใน Google โดยใช้คำว่า “popular web development frameworks”
ซึ่งภาพด้านบนจะเป็นเพียงแค่การค้นหาคร่าว ๆ ของผม โดยจะเห็นว่าส่วนใหญ่ Django จะติดอันดับต้น ๆ เรื่องความยอดนิยมในเว็บเฟรมเวิร์คกันเลย
Excellent Documentation
Django ต้องบอกเลยว่าเป็นหนึ่งในเฟรมเวิร์คที่มี Document ที่สุดยอดและง่ายต่อการทำความเข้าใจมาก ๆ แต่ก็ประกอบไปด้วยเนื้อหาและรายละเอียดที่ครบถ้วน Django Official Website. ซึ่งตามแบบฉบับที่เฟรมเวิร์คนั้น ๆ ควรจะมี นอกจากนั้นยังมี Tutorial ที่ให้ทุกคนที่เริ่มต้นศึกษา Django เอาไว้ทำแอพซึ่งเรียกวา Polls App ให้เราสามารถทำตามได้อีกด้วย ซึ่งจะมีทั้งสั้น 7 พาร์ท สอนตั้งแต่ติดตั้งและสร้างโปรเจคท์ขึ้นมา ไปจนถึงพาร์ทสุดท้ายคือการปรับแต่งหน้าแอดมิน ซึ่งถ้าทำแอพนี้เสร็จแล้วเชื่อว่า สกิล Django ของเพื่อน ๆ ต้องกลายเป็นคนละคนเมื่อมองย้อนกลับไปที่เริ่มเขียนวันแรกเลยแหละครับ
Less Code, and Eesy to Use
จริง ๆ แล้วผมคิดว่า Django นั้นเป็นเฟรมเวิร์คที่ไม่ได้ยุ่งยากอะไรมากมายเลย เพียงแต่โครงสร้างจะค่อนข้างเยอะ เช่น Model, View, Template ทำงานหรือเชื่อมโยงประสานกันอย่างไร อาจจะต้องใช้ความจำและทำความเข้าตรงส่วนนี้ซักหน่อย ดังนั้นตรงส่วนนี้จึงต้องใช้เวลาศึกษาซักพัก แต่ก็ไม่ได้นานจนเกินไปครับ เมื่อศึกษาโครงสร้างจนเข้าใจในระดับหนึ่งแล้วจะทำให้สามารถเขียนโค้ดได้ไหลลื่นมากยิ่งขึ้น นอกจากนั้น ยังเขียนโค้ดไม่เยอะ เมื่อเทียบกับเฟรมเวิร์คอื่น ๆ กับผลลัพธ์ที่เท่ากัน
Scalability
จะเห็นได้ว่า Django เป็นหนึ่งในเฟรมเวิร์คที่เป็นที่นิยมสำหรับ Startup ยิ่งในต่างประเทศยิ่งเป็นที่นิยมาก โดยเฉพาะเวลาที่ User นั้นเพิ่มมากขึ้นเป็นหมื่นเป็นแสน การพัฒนาก็สาารถทำได้โดยไม่ต้องรื้อหรือเปลี่ยนโครงสร้างหรือ Infrastructure อะไรต่าง ๆ มากมาย
ลองมาดูทราฟฟิคของเว็บเหล่านี้ที่ใช้ Django จะเห็นว่าแต่ละเว็บมีทราฟฟิคเป็นล้านต่อวัน ซึ่งเป็นตัวอย่างเพียงบางส่วนเท่านั้น
Compatible with Machine Learning Libraries
เพราะว่า Django เป็นเฟรมเวิร์คที่ถูกเขียนขึ้นมาโดยภาษาไพธอน และแน่นอนว่าไพธอนแทบจะเรียกได้ว่าเป็นภาษายอดนิยมอันดับ 1 ทางด้าน Machine Learning ดังนั้นตัวไลบรารี่ด้าน Machine Learning เช่น TensorFlow, Keras, PyTorch เราสามารถที่จะสร้างโมเดลขึ้นมาแล้วนำมาประยุกต์ใช้กับเว็บของเราได้ แต่ตรงส่วนนี้ก็ต้องใช้ศาสตร์และสกิลหลาย ๆ ด้านมารวมกัน แต่ถือว่ามีทางเลือกไว้ให้เราได้เลือก อยู่ที่ฝีมือของเราเท่านั้นว่าจะถึงหรือไม่
นอกจากนี้ผมยังมีตัวอย่างเว็บไซต์ที่เป็นเว็บที่รวบรวมเว็บไซต์ที่ถูกเขียนโดยใช้ Django โดยเพื่อน ๆ สามารถเข้าไปดูตัวอย่างเว็บไซต์ต่าง ๆ ได้ใน djangosite.org ซึ่งตอนนี้มีกว่า 5000 เว็บไซต์ที่ได้ทำการ Register กับเว็บไซต์นี้
สุดท้าย คงไม่ต้องกังวลกับศักยภาพของเฟรมเวิร์คตัวนี้กันแล้วใช่ไหมครับว่า เราจะสามารถใช้ทำอะไรได้บ้าง อยู่ที่เราจะมีฝีมือมากเพียงพอที่จะเขียนเพื่อสร้างเว็บไซต์หรือเว็บแอปพลิเคชันเทพ ๆ ขึ้นมา
สรุป
ข้อดี
- เป็นเฟรมเวิร์คที่สามารถสร้างตัว Prototype ได้อย่างรวดเร็ว
- มีเครื่องมือหลาย ๆ อย่างรวบรวมไว้ให้เสร็จสรรพในเฟรมเวิร์คเดียว
- มีความปลอดภัยสูงและน่าเชื่อถือ
- มีโครงสร้างที่เป็นระเบียบ มาตรฐาน จัดการได้ง่าย
- เป็นหนึ่งในเฟรมเวิร์คของไพธอนที่ได้รับความนิยมอย่างสูง มีคอมมิวนิตี้ขนาดใหญ่
- มี Documentation ที่ยอดเยี่ยม
- เขียนโค้ดไม่เยอะ เมื่อเทียบกับเฟรมเวิร์คอื่น ๆ กับผลลัพธ์ที่เท่ากัน
- Compatible กับเฟรมเวิร์คหรือไลบรารี่ด้าน Machine Learning ต่าง ๆ ของภาษาไพธอน ดังนั้นจึงสามารถนำโมเดลที่ได้ทำการเทรน มาประยุกต์ใช้กับเว็บของเราได้อย่างไม่มีปัญหา
- มีการพัฒนาอย่างต่อเนื่อง ทำให้มั่นใจได้ว่าจะใช้ Django ไปได้อีกนาน ไม่ใช่เฟรมเวิร์คโนเนมที่ไม่รู้วันรู้พรุ่งว่าจะหยุดซัพพอร์ตวันไหน โดย Django Software Foundation ก็มีโร้ดแมปที่วางไว้ชัดเจน
- ฯลฯ
ข้อเสีย
- ไม่ค่อยมีอิสระในการเขียนเพราะต้อง Follow ตามโครงสร้างของ Django ไม่งั้นโปรแกรมจะไม่สามารถทำงานได้ หรือทำงานได้ไม่มีประสิทธิภาพ
- ในประเทศไทยยังไม่ค่อยเป็นที่นิยมมากเท่าไหร่ เมื่อเทียบด้าน Web Development กับตัวเฟรมเวิร์คหลักของภาษาอื่น ๆ เช่น C#(.Net) PHP(Laravel), Node.js(Express.js) (แต่ว่าในต่างประเทศเป็นที่นิยมอย่างมาก โดยเฉพาะเหล่าสตาร์ทอัพต่าง ๆ )
- บทความที่เป็นภาษาไทยยังมีไม่เยอะเท่าที่ควร ดังนั้นคนที่กำลังจะศึกษาที่ภาษาอังกฤษไม่แข็งแรง อาจจะลำบากนิดหนึ่ง(แต่ถ้าคนที่พอได้ภาษาหรืออ่านทำความเข้าใจภาษาอังกฤษได้ ข้อนี้ไม่ใช่ปัญหาเลยครับ)
- ยังไม่ค่อยซัพพอร์ตเต็มที่เว็บแอพจำพวกที่ต้องมีการใช้งาน asynchronous เช่นการทำพวกเรียลไทม์เว็บแอพต่าง ๆ แต่ทางทีมพัฒนากำลังพัฒนาอย่างเต็มที่ เชื่อและหวังว่าในอนาคตอีกไม่นานจะรองรับอันนี้อย่างเต็มรูปแบบซักที (แต่ก็มี Channels ให้ใช้ก็โอเครเลยครับ)
หวังว่าบทความนี้คงเป็นประโยชน์ไม่มากก็น้อยกับผู้อ่านทุกท่านนะครับ โดยยังมีอีกหลายส่วนที่ยังไม่ได้ถูกเขียนในบทความนี่เดี๋ยวยังไงผมอาจจะมาเพิ่มเติมให้ภายหลังครับถ้าขาดตรงไหนไป โดยบทความหน้า Ep.3 ผมจะมาเขียนต่อในเรื่อง Django 101 Ep.3 Django Design Pattern, Model, Template, View(MTV)
ถ้าอ่านแล้วชื่นชอบ ช่วยกด Clap เพื่อสนับสนุนการเขียนบทความของเรา stackpython กันด้วยนะครับ หรือถ้ามีข้อแนะนำ สงสัยตรงไหนก็คอมเมนต์กันเข้ามาได้เลยครับผมจะดีใจมาก ๆ
หรือใครที่ยังไม่ได้อ่านบทความ Ep แรก ห้ามพลาดเลยครับรีบกลับไปอ่านด่วน!! Django 101 Ep.1
Sonny STACKPYTHON
สำหรับเพื่อน ๆ ที่อยากสนับสนุนผม ผมได้เปิดคอร์ส Django ออนไลน์ สามารถคลิ๊กเข้าดูรายละเอียดได้ที่ด้านล่างนี้ได้เลยครับ ถ้าบอกว่ามาจากบทความนี้ ลดให้พิเศษ 10% ครับ