เทอร์โบเกียร์
TurboGearsเป็นเฟรมเวิร์กสำหรับการพัฒนาเว็บแอปพลิเคชันด้วยภาษา Python ซึ่งประกอบด้วย ส่วนประกอบ WSGI หลายอย่าง เช่น WebOb, SQLAlchemy , ภาษาเทมเพลต Kajikiและ Repoze
TurboGears ได้รับการออกแบบโดยใช้ สถาปัตยกรรม Model-View-Controller (MVC) คล้ายกับStrutsหรือRuby on Railsโดยมีจุดประสงค์เพื่อให้การพัฒนาเว็บแอปพลิเคชันอย่างรวดเร็วด้วย Python ง่ายขึ้นและบำรุงรักษาได้ง่ายขึ้น ตั้งแต่เวอร์ชัน 2.3 เป็นต้นมา เฟรมเวิร์กนี้ยังได้เพิ่ม "โหมดขั้นต่ำ" ซึ่งช่วยให้สามารถใช้งานเป็นไมโครเฟรมเวิร์กในสภาพแวดล้อมที่ไม่จำเป็นต้องใช้หรือไม่อยากใช้เฟรมเวิร์กทั้งหมด
ชิ้นส่วน TurboGears
TurboGears สร้างขึ้นบนพื้นฐานของไลบรารีและมิดเดิลแวร์ ที่แตกต่างกันมากมาย เครื่องมือเริ่มต้นมีการเปลี่ยนแปลงระหว่างเวอร์ชัน 1.x, 2.x และ 2.3+ แต่ส่วนประกอบส่วนใหญ่สามารถใช้งานได้ในทุกเวอร์ชัน เนื่องจากมีการรองรับการกำหนดค่าทางเลือกมากมาย ส่วนประกอบหลักที่นักพัฒนาจะใช้งานมีดังต่อไปนี้
ส่วนประกอบ TurboGears 2.x
- SQLAlchemy ( โมเดล ) - กำหนดโครงสร้างตารางของฐานข้อมูลของผู้ใช้ และวิธีการเชื่อมโยงโครงสร้างเหล่านั้นกับอ็อบเจ็กต์ Python ที่คอนโทรลเลอร์ของผู้ใช้สามารถโต้ตอบได้
- Ming ( โมเดล ) - ทำหน้าที่เป็นเลเยอร์การเข้าถึงข้อมูลสำหรับ MongoDB คล้ายกับที่ SQLAlchemy กำหนดวิธีการเชื่อมโยงคอลเลกชันของ MongoDB กับอ็อบเจ็กต์ Python ที่คอนโทรลเลอร์ของผู้ใช้สามารถโต้ตอบได้
- Kajiki (เดิมชื่อ Genshi ) ( ดู ) - กำหนดเทมเพลตสำหรับHTMLหรือXHTMLที่ผู้ใช้จะสร้างขึ้น นี่คือส่วนที่ผู้ใช้กำหนดส่วนหน้าที่ไคลเอนต์จะโต้ตอบด้วย
- Repoze - Repoze.who ใช้ในการจัดการด้านความปลอดภัย (การระบุตัวตนและการตรวจสอบสิทธิ์) ผู้ใช้สามารถกำหนดกฎการอนุญาตโดยอิงจากเงื่อนไขที่แนบมากับคอนโทรลเลอร์ เฟรมเวิร์กนี้มีเงื่อนไขที่สร้างไว้แล้วบางส่วน แต่ก็สามารถเขียนเงื่อนไขแบบกำหนดเองได้เช่นกัน
- ToscaWidgets - เป็นไลบรารี วิดเจ็ตหลักสำหรับการสร้างฟอร์มและGUI ที่ซับซ้อน โดยค่าเริ่มต้น Tosca จะสร้างฟอร์ม HTML อย่างง่าย แต่ยังสามารถใช้เป็นมิดเดิลแวร์เพื่อเชื่อมต่อกับ วิดเจ็ต JavaScriptและชุดเครื่องมือขั้นสูงได้อีกด้วย แตกต่างจาก TurboGears 1.x ที่ไม่มีไลบรารี JavaScript ที่แนะนำ/บูรณาการอีกต่อไป[ 2 ]
- Gearbox คือชุดเครื่องมือที่ TurboGears ใช้ในการจัดการโปรเจ็กต์ สร้างโปรเจ็กต์ใหม่ และให้บริการแอปพลิเคชัน TurboGears แต่ผู้ใช้ยังสามารถเชื่อมต่อกับApache , Nginxหรือเว็บเซิร์ฟเวอร์ที่เข้ากันได้กับWSGI อื่น ๆ ได้อีกด้วย
เวอร์ชันก่อน 2.3 จะใช้:
- Pylons ( ตัวควบคุม ) - มิดเดิลแวร์นี้จัดการตรรกะเบื้องหลังทั้งหมดของผู้ใช้และเชื่อมต่อกับเว็บเซิร์ฟเวอร์ของผู้ใช้เพื่อนำเสนอข้อมูลไปยังเว็บ
- Pasterเป็นชุดเครื่องมือคำสั่งและเว็บเซิร์ฟเวอร์ที่ใช้แทน Gearbox
- Repoze.what - ใช้สำหรับจัดการการอนุญาต เมื่อกำหนดองค์ประกอบของคอนโทรลเลอร์ของผู้ใช้ที่จะเปิดเผยสู่เว็บ เงื่อนไขของ repoze.what จะกำหนดว่าใครสามารถเข้าถึงได้และภายใต้เงื่อนไขใด
ส่วนประกอบ TurboGears 1.x
- SQLObject (Model) - ส่วนหลังบ้าน ของข้อมูล ที่สามารถสร้างฐานข้อมูลหรือเชื่อมต่อกับข้อมูลที่มีอยู่บนเซิร์ฟเวอร์ฐานข้อมูลหลายแห่งได้
- SQLAlchemyจะถูกใช้เป็นค่าเริ่มต้นใน TurboGears เวอร์ชัน 1.1 ขึ้นไป
- Kid (View) - เครื่องมือสร้างเทมเพลตส่วนหน้าแบบ XHTML ที่เทมเพลตทั้งหมดเป็นไฟล์ XHTML หรือXML ที่ถูกต้อง ซึ่งโดยทั่วไปแล้วจะถูกสร้างขึ้นในลักษณะที่อนุญาตให้เปิดเทมเพลตเหล่านี้เป็นไฟล์ XHTML ธรรมดาเพื่อตรวจสอบการออกแบบ ในขณะเดียวกันก็มีฟีเจอร์สำหรับการฝังโค้ด Python ในรูปแบบ XML ด้วย
- Genshiคือรุ่นต่อจาก Kid และจะเข้ามาแทนที่ Kid ในฐานะเอ็นจิ้นสร้างเทมเพลตเริ่มต้นใน TurboGears เวอร์ชัน 1.1 ขึ้นไป โดยมีไวยากรณ์ที่เข้ากันได้กับ Kid เกือบ 100%
- CherryPy (Controller) - มิดเดิลแวร์ที่ช่วยให้สามารถเขียนโปรแกรมเว็บแอปพลิเคชันได้โดยการเขียนตัวจัดการเหตุการณ์ที่ส่งข้อมูลกลับไปยังเทมเพลต (ในกรณีของ TurboGears) นอกจากนี้ยังสามารถรับข้อมูลเดียวกันใน รูปแบบ Ajaxในรูปของสตรีมข้อมูลJSON ได้อีกด้วย
- MochiKitเป็นไลบรารี JavaScript ที่แนะนำ แต่เป็นตัวเลือกเสริมสำหรับ TurboGears 1.x มันถูกออกแบบมาเพื่อให้การเขียนโปรแกรมด้วย JavaScript มีลักษณะคล้ายกับ Python มากขึ้น ส่วนใหญ่ใช้สำหรับการใช้งาน ฟีเจอร์และวิดเจ็ต Ajaxเนื่องจากมีอินเทอร์เฟซสำหรับรับสตรีมข้อมูล JSON ในลักษณะอะซิงโครนัส
ปลั๊กอินเทมเพลต
ภาษาเทมเพลตอื่นๆ นอกเหนือจากGenshiสามารถใช้งานได้ผ่านไฟล์การกำหนดค่าของแอปของผู้ใช้ ปลั๊กอินที่รองรับในเวอร์ชัน 2.1 ปัจจุบันได้แก่ Myghty, Jinja2 , Mako, Cheetahและ Kajiki การสนับสนุนสำหรับเด็กยังไม่มีแผนที่จะเพิ่มเข้ามาในขณะนี้ เนื่องจาก Genshi มีลักษณะคล้ายคลึงกันมาก รายชื่อนี้อาจมีการเปลี่ยนแปลงในเวอร์ชันต่อๆ ไป
ประวัติโครงการ
TurboGears ถูกสร้างขึ้นครั้งแรกในปี 2548 โดย Kevin Dangoor ในฐานะเฟรมเวิร์กเบื้องหลังผลิตภัณฑ์ Zesty News ที่ยังไม่ได้เปิดตัว[ 3 ]เมื่อเขาเปิดตัวเป็น เฟรมเวิร์กโอ เพนซอร์ส ในช่วงปลายเดือนกันยายน 2548 ก็ได้รับการดาวน์โหลด วิดีโอสาธิตหน้าจอมากกว่า 30,000 ครั้งใน 3 เดือนแรก
ในเดือนมกราคม พ.ศ. 2550 เควิน ดังกูร์ ได้เกษียณจากตำแหน่งหัวหน้าโครงการ และอัลเบอร์โต วัลเวอร์เด ได้บริหารโครงการต่อจากเขา[ 4 ]แต่ต่อมาได้ลาออกเนื่องจากภาระผูกพันส่วนตัวอื่นๆ อัลเบอร์โตยังคงมีส่วนร่วมในชุมชน TurboGears ผ่านโครงการ ToscaWidgets ของเขา ปัจจุบันโครงการ TurboGears ได้รับการบริหารจัดการร่วมกันโดยกลุ่มนักพัฒนาหลักประมาณครึ่งโหล ภายใต้การนำของมาร์ค แรมม์ (ในฐานะหัวหน้าทีมพัฒนา TurboGears 2) และฟลอเรนต์ ไอด์ (ในฐานะผู้จัดการการวางจำหน่าย Turbogears 1.x)
ในเดือนมิถุนายน พ.ศ. 2550 ชุมชนได้เริ่มทดลองนำ API ของ TurboGears มาใช้กับส่วนประกอบและโปรโตคอลที่ใช้ในPylonsและมีการคาดการณ์ว่าเฟรมเวิร์กทั้งสองอาจจะรวมกันในที่สุด[ 5 ]อย่างไรก็ตาม เอกสารอย่างเป็นทางการของ TurboGears 2 ระบุว่าไม่น่าจะเกิดขึ้น เนื่องจาก "ลำดับความสำคัญที่แตกต่างกัน แต่เข้ากันได้" [ 6 ]ของทั้งสองโครงการ Pylons ต้องการมุ่งเน้นไปที่การออกแบบระดับต่ำที่ขยายได้ ในขณะที่ TurboGears มุ่งเน้นไปที่การนำเสนอแพ็คเกจที่สมบูรณ์และใช้งานง่าย ดังนั้นทั้งสองจึงทำงานร่วมกันในลักษณะเดียวกับที่ Debian และ Ubuntu ทำในปัจจุบัน สาขา 2.x ใหม่มีการเผยแพร่เวอร์ชันเสถียรครั้งแรกในเดือนพฤษภาคม พ.ศ. 2552
ณ ฤดูใบไม้ร่วงปี 2008 TurboGears มีชุมชนขนาดใหญ่และแข็งแกร่ง โดยมีผู้ใช้มากกว่า 3,000 คนในรายชื่อผู้รับจดหมายของ TurboGears มีหนังสือจาก สำนักพิมพ์ Prentice Hallตีพิมพ์ในเดือนพฤศจิกายนปี 2006 และ มีแอปพลิเคชัน TurboGears ทั้งแบบ โอเพนซอร์สและแบบกรรมสิทธิ์จำนวนมากที่ถูกนำไปใช้งานจริง การพัฒนาเป็นไปอย่างค่อยเป็นค่อยไปแต่สม่ำเสมอ และยังได้รับแรงผลักดันใหม่จากความสำเร็จในการเข้าร่วมเป็นองค์กรให้คำปรึกษาในโครงการGoogle Summer of Codeในปี 2008 และ 2009 TurboGears 1.1 ซึ่งมีจุดมุ่งหมายเพื่อช่วยเว็บไซต์เก่าๆ เปลี่ยนไปใช้เวอร์ชัน 2.x ได้รับการเผยแพร่ในเดือนตุลาคมปี 2009 และกำลังมีการจัดทำหนังสือฉบับปรับปรุงใหม่เพื่อให้สอดคล้องกับการเปลี่ยนแปลงที่ TurboGears 2 นำมา
ในปี 2010 โครงการประสบปัญหาอยู่บ้าง นักพัฒนาหลักถูกเรียกตัวไปเนื่องจากปัญหาในชีวิตจริง อย่างไรก็ตาม ในช่วงปลายเดือนมกราคม 2011 โครงการได้เริ่มปรับโครงสร้างใหม่และทำงานเพื่อกลับมาสู่เส้นทางที่ถูกต้อง หลังจากใช้เวลาหลายเดือนในการจัดการโครงสร้างพื้นฐานและแก้ไขปัญหาด้านการเขียนโค้ด TurboGears ก็ได้ปล่อยเวอร์ชันใหม่ (2.0.4 และ 2.1.2) ออกมา
ในปี 2013 โครงการได้เปลี่ยนจากการใช้โค้ดเบส Pylons มาใช้ Python 3 เพื่อรองรับการทำงานที่เร็วขึ้นและติดตั้งง่ายขึ้น โดยยังคงรักษา ความเข้ากันได้กับเวอร์ชันก่อนหน้าไว้ ส่งผลให้มีการปล่อยเวอร์ชัน 2.3.0 ในเดือนสิงหาคม 2013 นอกจากนี้ยังมีการประกาศรอบการปล่อยเวอร์ชันที่เร็วขึ้น ซึ่งคาดว่าจะมีการปล่อยเวอร์ชันปรับปรุงแก้ไขทุกๆ ประมาณ 3 เดือน
อนาคตของ TurboGears
ขณะนี้การพัฒนา TurboGears มุ่งเน้นไปที่เวอร์ชัน 2.x เป็นหลัก โดยเวอร์ชัน 2.3 เป็นเวอร์ชันหลักที่มีการรองรับ Python 3
เส้นทางการเปลี่ยนผ่านจากเวอร์ชัน 1.x ไปยังเวอร์ชัน 2.x นั้นถูกจัดเตรียมไว้ผ่านเวอร์ชัน 1.1 และ 1.5 ซึ่งได้เปลี่ยนภาษา ORM และภาษาเทมเพลตเริ่มต้นให้ตรงกับที่ใช้ในซีรีส์ 2.x ทีมงาน TurboGears ได้ชี้แจงให้ผู้ใช้ใหม่ทราบอย่างชัดเจนว่า 2.x คืออนาคต และ 1.x นั้นได้รับการดูแลรักษาไว้เพื่อความสะดวกของผู้ใช้เดิมเท่านั้น
ในช่วงปี 2011 นักพัฒนาหลักของ TurboGears ได้พูดคุยกับโครงการ Pylons เพื่อผนึกกำลังกับพวกเขาและนักพัฒนาของ Repoze.BFG ในฐานะโครงการใหม่ที่รวมกันเรียกว่าPyramidเนื่องจากปัญหาความเข้ากันได้กับเวอร์ชันก่อนหน้าที่จะเกิดขึ้น และเพื่อรับประกันว่า TurboGears จะยังคงเป็นแพลตฟอร์มที่เชื่อถือได้ในระยะยาว ทีมงานปัจจุบันจึงตัดสินใจร่วมมือกับโครงการ Pylons ในทุกวิถีทางที่เป็นไปได้ แต่จะไม่ใช้ Pyramid เป็นแกนหลักของ TurboGears [ 7 ]
การพัฒนาในอนาคต การสนับสนุน Python 3 และการปรับปรุงความเร็วเกิดขึ้นในสาขา 2.3 ซึ่งมีการเขียนแกนหลักของ TurboGears ใหม่ทั้งหมดในขณะที่ยังคงความเข้ากันได้กับแอปพลิเคชันที่มีอยู่ เนื่องจากในเวอร์ชันนั้น TurboGears มีแกนหลักเป็นของตัวเองแทนที่จะใช้เฟรมเวิร์ก Pylons [ 8 ]
ในเวอร์ชัน 2.3 เฟรมเวิร์กนี้ได้ทดลองใช้สิ่งที่เรียกว่า "โหมดขั้นต่ำ" ซึ่งทำให้สามารถทำงานเป็นไมโครเฟรมเวิร์กได้อย่างแท้จริง ลดการพึ่งพาจากหลายสิบเหลือเพียง 3 รายการ และวางตำแหน่ง TurboGears ไว้ระหว่าง Flask และ Django ในกลุ่มเฟรมเวิร์ก Python ด้วยวัตถุประสงค์ที่สามารถปรับขนาดได้ตั้งแต่ไมโครเฟรมเวิร์กไปจนถึงฟูลสแต็กเฟรมเวิร์ก ขึ้นอยู่กับการใช้งาน TurboGears2 หรือแพ็กเกจ tg.devtools เท่านั้น
ตั้งแต่เวอร์ชัน 2.4 เป็นต้นมา เฟรมเวิร์กนี้มีสถาปัตยกรรมแบบโมดูลาร์ที่ใช้ส่วนประกอบเป็นหลัก ซึ่งช่วยให้ผู้ใช้สามารถเปิดใช้งานและแทนที่ส่วนประกอบได้ตามต้องการ ทำให้ TurboGears บรรลุพันธกิจในการเป็นเฟรมเวิร์กเว็บที่สามารถปรับขนาดได้ตามความต้องการของผู้ใช้