รีวิว: 13 เฟรมเวิร์กเว็บ Python เปรียบเทียบ

หากคุณกำลังพัฒนาเว็บแอปพลิเคชันและคุณได้เลือก Python เป็นภาษาในการสร้างนั่นเป็นวิธีที่ชาญฉลาด ความเป็นผู้ใหญ่ในการพัฒนาของ Python ไลบรารีที่แข็งแกร่งและการยอมรับในโลกแห่งความเป็นจริงอย่างกว้างขวางช่วยให้การพัฒนาเว็บเป็นเรื่องง่าย

ตอนนี้มาถึงส่วนที่ยาก: การเลือกหนึ่งในเฟรมเวิร์กเว็บ Python ที่มีให้เลือกมากมาย ไม่ใช่แค่จำนวนที่เพิ่มขึ้นเรื่อย ๆ แต่อาจเป็นเรื่องยากที่จะหาหมายเลขที่เหมาะกับกรณีการใช้งานของคุณมากที่สุด หากคุณกำลังสร้าง REST API ที่รวดเร็วและสกปรกคุณไม่จำเป็นต้องอยู่ใกล้กับท่อประปาและสายไฟที่จำเป็นสำหรับแอปพลิเคชันที่ต้องเผชิญกับผู้ใช้เต็มรูปแบบด้วยการเข้าสู่ระบบของผู้ใช้การตรวจสอบแบบฟอร์มและการจัดการการอัปโหลด

วิดีโอที่เกี่ยวข้อง: การสร้างเว็บแอปง่ายๆด้วย Python และ Flask

ในบทสรุปนี้เราจะตรวจสอบเฟรมเวิร์กเว็บ Python ที่ใช้งานกันอย่างแพร่หลาย 13 รายการ เราจะสังเกตว่าเว็บแอปพลิเคชันประเภทใดเหมาะสมที่สุดในการสร้างและดูว่าแอปพลิเคชันเหล่านี้ซ้อนกันอย่างไรในหกด้านนี้

การติดตั้ง:การตั้งค่าเฟรมเวิร์กนั้นง่ายหรือตรงไปตรงมาเพียงใด - โครงการที่ไม่ต้องการการติดตั้งอย่างเป็นทางการ (สามารถทิ้งลงในโครงการที่มีอยู่เป็นโมดูลที่รวมอยู่ด้วยก็ได้) ต้องใช้แผ่นสำเร็จรูปน้อยที่สุดในการเริ่มต้นหรือมาพร้อมกับบางประเภท ของการตั้งค่าที่กำหนดไว้ล่วงหน้าจะได้รับคะแนนพิเศษ

เอกสารประกอบ:เกือบทุกโครงการ Python ที่เหมาะสมมีเอกสารประกอบที่ดำเนินการตั้งค่าแสดงกรณีการใช้งานพื้นฐานและให้รายละเอียดเกี่ยวกับ API ที่นี่เราให้คะแนนที่สูงกว่าแก่เฟรมเวิร์กที่แสดงวิธีสร้างแอพทั้งหมดโดยเป็นส่วนหนึ่งของบทช่วยสอนรวมถึงสูตรอาหารทั่วไปหรือรูปแบบการออกแบบและอื่น ๆ ที่เหนือกว่าการเรียกร้องให้ปฏิบัติหน้าที่ (เช่นการให้รายละเอียดเกี่ยวกับวิธีการเรียกใช้ กรอบภายใต้ตัวแปร Python เช่น PyPy หรือ IronPython)

การจัดการ:นี่คือคะแนนสัมพัทธ์ซึ่งระบุว่าต้องใช้งานในการกำหนดค่าและรักษากรอบงานมากเพียงใด เฟรมเวิร์กขั้นต่ำจะมีคะแนนสูงกว่าโดยค่าเริ่มต้น

ความสามารถดั้งเดิม:รวมแบตเตอรี่กี่ก้อน? คะแนนที่สูงกว่าจะไปถึงเฟรมเวิร์กที่ให้การสนับสนุนดั้งเดิมสำหรับการทำให้เป็นสากลเทมเพลต HTML และเลเยอร์การเข้าถึงข้อมูล คะแนนยังไปที่เฟรมเวิร์กที่ใช้เนทีฟของ Python ที่เพิ่งเปิดตัวเมื่อเร็ว ๆ นี้สำหรับการดำเนินการ I / O แบบอะซิงโครนัส

การรักษาความปลอดภัย:เฟรมเวิร์กที่ให้มาตรการรักษาความปลอดภัยดั้งเดิมเช่นการป้องกันการปลอมแปลงคำขอข้ามไซต์ (CSRF) และการจัดการเซสชันด้วยคุกกี้ที่เข้ารหัสจะได้รับคะแนนที่สูงขึ้น

ความสามารถในการปรับขยาย:เฟรมเวิร์ก Python ส่วนใหญ่สามารถใช้ประโยชน์จากโปรเจ็กต์เช่น Gevent หรือ Gunicorn เพื่อทำงานตามขนาด ที่นี่เราดูคุณสมบัติที่มาจากเฟรมเวิร์กที่ส่งเสริมความสามารถในการปรับขนาดเช่นเอาต์พุตและการแคชส่วนหน้า

หากคุณอยากรู้เกี่ยวกับการวัดประสิทธิภาพลองดูชุดการทดลองอย่างต่อเนื่องของ TechEmpower ซึ่งเปรียบเทียบเว็บเฟรมเวิร์กหลาย ๆ งานในงานต่างๆพร้อมรหัสและวิธีการที่โพสต์ไปยัง GitHub และต้องผ่านการประเมินใหม่อย่างต่อเนื่อง กรอบทั้งหมดในการสนทนานี้ไม่ได้รับการวิเคราะห์ที่นั่น แต่เป็นไปได้ที่จะเข้าใจได้ดีว่าเฟรมเวิร์คใดทำงานได้ดีที่สุดภายใต้โหลดประเภทใด

เราจะดู 13 เฟรมเวิร์กทั้งหมด ห้าอย่างนี้ ได้แก่ CubicWeb, Django, Web2py, Weppy และ Zope2 ใช้แนวทาง "อ่างล้างจาน" โดยบรรจุในคุณลักษณะส่วนใหญ่ที่คุณคาดไม่ถึงว่าจำเป็นสำหรับเว็บแอปพลิเคชัน อีกแปดเฟรมเวิร์กที่เหลือ ได้แก่ Bottle, CherryPy, Falcon, Flask, Pyramid, Tornado, Web.py และ Wheezy.web นำเสนอการใช้งานที่เรียบง่ายมากขึ้นการซื้อขายจำนวนมากและความสมบูรณ์เพื่อความเรียบง่ายและสะดวก

เริ่มกันที่วืด

เฟรมเวิร์กเว็บ Python รุ่นเฮฟวี่เวท

CubicWeb

CubicWeb ถูกเรียกเก็บเงินเป็น "เฟรมเวิร์กแอปพลิเคชันเว็บเชิงความหมายที่สนับสนุนการใช้ซ้ำและการออกแบบเชิงวัตถุ" เป็นระบบที่น่าสนใจตามที่ Rick Grehan ระบุไว้เมื่อเขามองย้อนกลับไปในปี 2011 ซึ่งเน้นการใช้งานนามธรรมและส่วนประกอบของโค้ดที่ใช้ซ้ำได้ที่เรียกว่า "คิวบ์" แต่อาจเป็นนามธรรมหรือแปลกเกินไปสำหรับนักพัฒนาบางราย

Cubes เป็นส่วนประกอบซอฟต์แวร์ที่มีสคีมา (แบบจำลองข้อมูล) เอนทิตี (ตรรกะการเขียนโปรแกรม) และมุมมอง ด้วยการประกอบหลายคิวบ์แต่ละอันจะทำงานของตัวเองคุณสามารถเขียนแอพพลิเคชั่นซอฟต์แวร์โดยนำโค้ดของคุณเองและโค้ดของผู้อื่นมาใช้ซ้ำ

ที่สำคัญ CubicWeb มีโครงพื้นฐานที่ใช้โดยเว็บแอปทุกตัว: "ที่เก็บ" สำหรับการเชื่อมต่อข้อมูลและการจัดเก็บ “ เว็บเอ็นจิ้น” สำหรับคำขอ / การตอบกลับ HTTP พื้นฐานและการดำเนินการ CRUD และสคีมาสำหรับการสร้างแบบจำลองข้อมูล ทั้งหมดนี้อธิบายไว้ในนิยามคลาส Python ในการตั้งค่าและจัดการอินสแตนซ์ของ CubicWeb คุณต้องทำงานกับเครื่องมือบรรทัดคำสั่งที่คล้ายกับที่ใช้สำหรับ Django

CubicWeb ไม่ได้ใช้ฟังก์ชัน async ดั้งเดิมของ Python 3 วิธีวงเวียนในการรวม async คือการใช้โมดูล cubicweb.pyramid เพื่อใช้กรอบงาน Pyramid เป็นเว็บเซิร์ฟเวอร์และวาดบนทางแยกของ Pyramid ที่ใช้โครงสร้างแบบ async แต่ตอนนี้สิ่งที่ตรงไปตรงมากว่านั้นดูเหมือนจะไกล

ในการดึงหรือจัดการข้อมูลถาวรในแอป CubicWeb คุณใช้ Relation Query Language (RQL) ซึ่งใช้ไวยากรณ์คล้าย SQL คลุมเครือ แต่มีรูปแบบตาม SparQL ของ W3C เหตุผลของ CubicWeb สำหรับสิ่งนี้คือสิ่งที่เป็นนามธรรมอีกครั้ง: RQL ให้เส้นทางแยกส่วนอย่างมากเพื่อเชื่อมโยงแหล่งข้อมูลต่างๆ แต่เมื่อมีการใช้งานโดยการสร้างแบบสอบถามด้วยตนเองเป็นสตริงก็น่าจะรู้สึกล้าสมัยไปแล้วสำหรับนักพัฒนาที่คุ้นเคยกับ ORM

มีอุปสรรคอื่น ๆ ในการใช้ CubicWeb ประการแรกการตั้งค่าอาจเป็นเรื่องยุ่งยาก เนื่องจาก CubicWeb มีการอ้างอิงจำนวนมากจึงควรใช้pip installเพื่อดึงข้อมูลทั้งหมด คุณอาจต้องทำการปรับแต่งด้วยตนเองจำนวนหนึ่งกับสภาพแวดล้อมในพื้นที่ สิ่งนี้ตรงกันข้ามกับเฟรมเวิร์กอื่น ๆ โดยสิ้นเชิงที่การรันpip installหรือวางโค้ดของเฟรมเวิร์กลงในโฟลเดอร์ย่อยของโปรเจ็กต์อื่นเป็นสิ่งที่จำเป็น

ปัญหาที่อาจเกิดขึ้นอีกประการหนึ่งคือการไม่มีเครื่องมือแม่แบบดั้งเดิม การสร้าง HTML จะถูกปล่อยให้กับนักพัฒนา คุณสามารถเอาชนะสิ่งนี้ได้โดยใช้ระบบเทมเพลตของบุคคลที่สามเช่น Jinja2 หรือการเลือกคิวบ์ที่มีเครื่องมือสำหรับ Web UIs เช่นสำหรับกรอบงาน Boostrap HTML

ปัญหาที่มีมายาวนานอย่างหนึ่งของ CubicWeb - การขาดการสนับสนุน Python 3 - ได้รับการแก้ไขแล้ว ตั้งแต่เดือนมิถุนายน 2016 และเวอร์ชัน 3.23 การสนับสนุน Python 3 จะเข้าสู่ CubicWeb ยกเว้นโมดูลเช่น Twisted ที่ไม่ได้รับการพอร์ตอย่างสมบูรณ์

เช่นเดียวกับ Web2py CubicWeb อ้างถึงเอกสารที่มีความยาวว่า "หนังสือ" ต้องใช้เวลาในการอธิบายแนวทางที่ผิดปกติของ CubicWeb แสดงให้เห็นถึงวิธีการสร้างแอปพลิเคชันพื้นฐานบางอย่างรวมถึงการอ้างอิง API และโดยทั่วไปแล้วจะไม่เจาะจง

Django

ในทศวรรษและการเปลี่ยนแปลงนับตั้งแต่ Django ปรากฏตัวครั้งแรกมันได้กลายเป็นหนึ่งในเฟรมเวิร์กที่มีการปรับใช้อย่างแพร่หลายที่สุดของ Python สำหรับการสร้างเว็บแอปพลิเคชัน Django มาพร้อมกับแบตเตอรี่ส่วนใหญ่ที่คุณอาจต้องการดังนั้นจึงมีประโยชน์ต่อการสร้างแอปพลิเคชันขนาดใหญ่มากกว่าแบตเตอรี่ขนาดเล็ก

วิดีโอที่เกี่ยวข้อง: การสร้างเว็บไซต์ง่ายๆด้วย Django

หลังจากหลายปีของการนั่งที่เวอร์ชัน 1.x Django เพิ่งสร้างเวอร์ชันที่ชนไปทางซ้ายของจุดทศนิยม การเปลี่ยนแปลงที่ยิ่งใหญ่ที่สุดใน Django 2.0 คือตอนนี้เฟรมเวิร์กใช้งานได้กับ Python 3.4 ขึ้นไปเท่านั้น ตามหลักการแล้วคุณควรใช้ Python 3.x อยู่แล้วดังนั้นเหตุผลเดียวที่จะใช้ Django สาขา 1.x คือถ้าคุณติด Python เวอร์ชันเก่า

ส่วนสำคัญของการอุทธรณ์ของ Django คือความเร็วในการปรับใช้ เนื่องจากประกอบด้วยชิ้นส่วนจำนวนมากที่คุณต้องการสำหรับการพัฒนาเว็บแอปพลิเคชันโดยเฉลี่ยคุณจึงสามารถดำเนินการได้อย่างรวดเร็ว การกำหนดเส้นทางการแยกวิเคราะห์ URL การเชื่อมต่อฐานข้อมูล (รวมถึง ORM) การตรวจสอบความถูกต้องของแบบฟอร์มการป้องกันการโจมตีและการสร้างเทมเพลตนั้นมีอยู่แล้วภายใน

คุณจะพบหน่วยการสร้างสำหรับสถานการณ์เว็บแอปพลิเคชันที่พบบ่อยที่สุด ตัวอย่างเช่นการจัดการผู้ใช้พบได้ในเว็บไซต์ส่วนใหญ่ดังนั้น Django จึงเสนอให้เป็นองค์ประกอบมาตรฐาน แทนที่จะต้องสร้างระบบของคุณเองสำหรับการติดตามบัญชีผู้ใช้เซสชันรหัสผ่านการเข้าสู่ระบบ / ออกจากระบบสิทธิ์ของผู้ดูแลระบบและอื่น ๆ Django มีคุณลักษณะเหล่านี้โดยกำเนิด สามารถใช้ตามที่เป็นอยู่หรือขยายเพื่อครอบคลุมกรณีการใช้งานใหม่โดยใช้จำนวนงานน้อยที่สุด

zope.formlib 1. Core คือ BSD; ส่วนประกอบบางอย่าง LGPLv3 2. จำหน่ายผ่าน; ติดตั้งแยกต่างหาก แต่ได้รับการสนับสนุนเป็นส่วนหนึ่งของโครงการ 3. พร้อมใช้งานผ่านส่วนขยายของบุคคลที่สาม
  CubicWeb Django Web2py Weppy Zope2
ใบอนุญาต LGPL BSD LGPLv3 BSD / LGPLv3 [1] ใบอนุญาตสาธารณะ Zope
ระบบเทมเพลต HTML ดั้งเดิม ใช่ ใช่ ใช่ ใช่ ใช่
ORM ดั้งเดิม / การจัดการข้อมูล ใช่ ใช่ ใช่ ใช่ ใช่
ไลบรารีส่วนขยาย ใช่ ใช่ ใช่ ใช่ ใช่
การตรวจสอบแบบฟอร์ม ใช่ ใช่ ใช่ ใช่ ใช่ [2]
การป้องกันการปลอมแปลงคำขอข้ามไซต์ ใช่ ใช่ ใช่ ใช่ ใช่
การจัดการผู้ใช้ / การเข้าถึงตามบทบาท ใช่ ใช่ ใช่ ใช่ ใช่
รองรับ Python 3 ใช่ ใช่ ไม่ ใช่ ไม่
การย้ายสคีมาสำหรับโมเดลข้อมูล ใช่ ใช่ ใช่ ใช่ ไม่
การแคชการตอบกลับ ไม่ ใช่ ใช่ ใช่ ใช่
การสนับสนุนความเป็นสากล ใช่ ใช่ ใช่ ใช่ ใช่
รองรับ Native WebSockets ไม่ ไม่ [3] ใช่ ไม่ ไม่
สภาพแวดล้อมการพัฒนาแบบโต้ตอบ ใช่ ไม่ ใช่ ไม่ ใช่

Django มีค่าเริ่มต้นที่ดีและปลอดภัยซึ่งช่วยป้องกันเว็บแอปพลิเคชันของคุณจากการโจมตี เมื่อคุณวางตัวแปรในเทมเพลตเพจเช่นสตริงที่มี HTML หรือ JavaScript เนื้อหาจะไม่แสดงผลตามตัวอักษรเว้นแต่คุณจะกำหนดอินสแตนซ์ของตัวแปรอย่างชัดเจนว่าปลอดภัย ซึ่งจะช่วยลดปัญหาการเขียนสคริปต์ข้ามไซต์ที่พบบ่อยได้ด้วยตัวเอง หากคุณต้องการดำเนินการตรวจสอบความถูกต้องของแบบฟอร์มคุณสามารถใช้ทุกอย่างตั้งแต่การป้องกัน CSRF แบบธรรมดาไปจนถึงกลไกการตรวจสอบความถูกต้องแบบฟิลด์ต่อฟิลด์ที่ส่งคืนข้อเสนอแนะข้อผิดพลาดโดยละเอียด

คุณลักษณะที่กำหนดไว้อย่างสมบูรณ์และกว้างพอ ๆ กับ Django จะไม่ดีเท่าไหร่หากไม่มีเอกสารที่มีประสิทธิภาพเพียงพอที่จะไปด้วย ไซต์เอกสารของ Django เจาะลึกทุกแง่มุมของกรอบงานจากหลาย ๆ มุม การทำงานกับ Python 3 หรือภาษาอื่น ๆ การรักษาความปลอดภัยการใช้ส่วนประกอบเว็บแอปพลิเคชันทั่วไป (เช่นเซสชันหรือการแบ่งหน้า) สร้างแผนผังไซต์ซึ่งครอบคลุมทั้งหมด API สำหรับแต่ละเลเยอร์ของแอปพลิเคชัน ได้แก่ โมเดลมุมมองและเทมเพลตมีการอธิบายรายละเอียดด้วยเช่นกัน

อย่างไรก็ตามด้วยพลังอันยิ่งใหญ่ทำให้เกิดความซับซ้อนอย่างมาก แอปพลิเคชัน Django มีชื่อเสียงในด้านการใช้งานที่หนักหน่วงโดยมีชิ้นส่วนที่เคลื่อนไหวได้มากมาย แม้แต่แอป Django ธรรมดาที่มีเส้นทางเพียงไม่กี่เส้นทางก็ต้องมีการกำหนดค่าในระดับที่เหมาะสมเพื่อให้ทำงานได้ หากงานของคุณคือไม่ต้องทำอะไรมากไปกว่าการตั้งค่าจุดสิ้นสุด REST แบบธรรมดาสองสามจุด Django ก็เกือบจะเกินความจำเป็น

Django ยังมีนิสัยใจคอ ตัวอย่างเช่นเทมเพลตเพจไม่สามารถใช้ callables ได้ ตัวอย่าง: คุณสามารถส่งผ่าน{{user.name}}เป็นส่วนประกอบในแม่ {{user.get_name()}}แต่ไม่ได้ เป็นหนึ่งในวิธีที่ Django ทำให้มั่นใจได้ว่าเทมเพลตจะไม่ทำสิ่งที่น่ารังเกียจโดยไม่ได้ตั้งใจ แต่ข้อ จำกัด เหล่านั้นอาจทำให้เกิดปัญหาได้หากคุณไม่ได้เตรียมพร้อมสำหรับพวกเขา แม้ว่าจะมีวิธีแก้ปัญหา แต่ก็มักจะต้องเสียค่าใช้จ่ายในการปฏิบัติงาน

แกนของ Django เป็นแบบซิงโครนัส อย่างไรก็ตามวิธีหนึ่งในการเพิ่มพฤติกรรม async คือการใช้โครงการ Django Channels โปรเจ็กต์นี้ซึ่งเป็นส่วนเสริม Django อย่างเป็นทางการเพิ่มการจัดการ async สำหรับการเชื่อมต่อและซ็อกเก็ตให้กับ Django ในขณะที่ยังคงรักษาสำนวนการเขียนโปรแกรมของ Django ไว้

Web2py

ในโลกของ Ruby Ruby on Rails เป็นเว็บเฟรมเวิร์กโดยพฤตินัย Massimo Di Pierro ศาสตราจารย์ด้านวิทยาการคอมพิวเตอร์ของ DePaul University ได้รับแรงบันดาลใจจาก Rails ในการสร้างเว็บเฟรมเวิร์กใน Python ซึ่งง่ายต่อการติดตั้งและทำงานด้วย ผลลัพธ์คือ Web2py

สิ่งที่น่าสนใจที่สุดของ Web2py คือสภาพแวดล้อมการพัฒนาในตัว เมื่อคุณตั้งค่าอินสแตนซ์ของ Web2py คุณจะได้รับอินเทอร์เฟซเว็บซึ่งโดยพื้นฐานแล้วเป็นโปรแกรมแก้ไขแอปพลิเคชัน Python ออนไลน์ซึ่งคุณสามารถกำหนดค่าส่วนประกอบของแอปได้ โดยทั่วไปหมายถึงการสร้างโมเดลมุมมองและตัวควบคุมซึ่งแต่ละตัวอธิบายผ่านโมดูล Python หรือเทมเพลต HTML แอพตัวอย่างบางตัวมาพร้อมกับ Web2py นอกกรอบ คุณสามารถแยกสิ่งเหล่านี้ออกจากกันเพื่อดูวิธีการทำงานหรือใช้ประโยชน์จากเทมเพลตเริ่มต้นเพื่อสร้างแอปของคุณเอง

โดยทั่วไปนักพัฒนาจะปรับใช้ Web2py โดยเพียงแค่ดาวน์โหลดซอร์สโค้ดและใช้สิ่งนั้น แต่สำหรับผู้ใช้ทางเทคนิคน้อยกว่าใน Windows หรือ MacOS ผู้สร้างของ Web2py จะเสนอเวอร์ชันที่เป็นเซิร์ฟเวอร์แบบสแตนด์อโลนเป็นหลัก ดาวน์โหลดแกะและเรียกใช้เวอร์ชันใดเวอร์ชันหนึ่งเหล่านี้และคุณจะมีเว็บเซิร์ฟเวอร์ในตัวพร้อมสำเนา Web2py ที่กำหนดค่าไว้ล่วงหน้าในตัวนี่เป็นวิธีที่ดีในการสร้างแอป Web2py ซึ่งจะสามารถนำไปใช้งานได้ ที่อื่นตามต้องการ

เว็บอินเตอร์เฟสของ Web2py สร้างขึ้นด้วย Bootstrap 2.16.1 ดังนั้นจึงง่ายต่อการมองเห็นและใช้งานง่าย ตัวแก้ไขในเบราว์เซอร์ไม่สามารถใช้แทน IDE แบบเต็มได้ แต่มีการติดตั้งตัวช่วยที่เป็นประโยชน์เช่นการกำหนดหมายเลขบรรทัดและการเน้นไวยากรณ์ Python (รวมถึงการเยื้องอัตโนมัติ) นอกจากนี้ยังมีเว็บอินเทอร์เฟซที่รวดเร็วสำหรับ Python shell ดังนั้นคุณสามารถโต้ตอบกับ Web2py จากบรรทัดคำสั่งได้หากจำเป็นซึ่งเป็นข้อตกลงที่ดีสำหรับผู้เชี่ยวชาญ

ระบบนามธรรมข้อมูลที่ใช้ใน Web2py ทำงานแตกต่างจาก ORM ของ Django และ ORM อื่น ๆ ที่ได้รับแรงบันดาลใจจากระบบนี้เล็กน้อย (เช่น Peewee) ระบบเหล่านี้ใช้คลาส Python เพื่อกำหนดโมเดลโดยที่ใน Web2py คุณใช้ฟังก์ชันตัวdefine_tableสร้างเพื่อสร้างอินสแตนซ์โมเดล ความแตกต่างเหล่านี้ส่วนใหญ่มักจะสร้างความเสียหายให้กับผู้ที่มีประสบการณ์กับสิ่งหนึ่งอยู่แล้วและเริ่มใช้ความแตกต่าง พวกเขามีความซับซ้อนพอ ๆ กันสำหรับผู้มาใหม่ คุณไม่น่าจะมีปัญหากับการผูก Web2py กับผู้ให้บริการข้อมูลเนื่องจากพูดคุยกับฐานข้อมูลหลักเกือบทุกแห่งที่มีอยู่

ฟังก์ชันที่เกี่ยวข้องกับฐานข้อมูลที่มีประโยชน์อย่างแท้จริงคือความสามารถในการสร้างแผนภาพของแบบจำลองยิ่งเห็นภาพว่าโมเดลของคุณเกี่ยวข้องกันอย่างไร คุณจะต้องติดตั้งไลบรารี pygraphviz เพื่อเปิดใช้งานคุณสมบัตินั้น

Web2py ให้ส่วนประกอบระดับมืออาชีพอื่น ๆ อีกมากมาย: ฟังก์ชันสากลวิธีการแคชหลายวิธีการควบคุมการเข้าถึงและการอนุญาตและแม้แต่เอฟเฟกต์ส่วนหน้า (ตัวอย่างเช่นตัวเลือกวันที่ในรูปแบบ) ผ่านการสนับสนุนแบบบูรณาการสำหรับ jQuery และ AJAX นอกจากนี้ยังมีตะขอสำหรับมิดเดิลแวร์ภายนอกและภายในแม้ว่าคุณจะไม่ได้รับอนุญาตให้ใช้มิดเดิลแวร์เพื่อแทนที่ฟังก์ชัน Web2py หลัก

ข้อ จำกัด ที่สำคัญอย่างหนึ่งของ Web2py คือเข้ากันได้กับ Python 2.x เท่านั้น สำหรับสิ่งนี้หมายความว่า Web2py ไม่สามารถใช้ไวยากรณ์ async ของ Python 3 ได้ สำหรับสองคนหากคุณพึ่งพาไลบรารีภายนอกที่เป็นเอกสิทธิ์ของ Python 3 คุณก็โชคไม่ดี อย่างไรก็ตามงานกำลังดำเนินการเพื่อให้สอดคล้องกับ Web2py Python 3 และใกล้จะเสร็จสมบูรณ์ในขณะที่เขียนนี้

ไม่น่าแปลกใจที่เอกสารของ Web2py เรียกว่า "หนังสือ" ประการแรกครอบคลุมเนื้อหาจำนวนมากบน Web2py, Python และสภาพแวดล้อมการปรับใช้ที่ใช้สำหรับทั้งสองอย่าง ประการที่สองมันเขียนในรูปแบบการเล่าเรื่องที่เข้าถึงได้ง่าย ประการที่สามพูดถึงเชิงลึกเกี่ยวกับสถานการณ์การสร้างแอปพลิเคชันทั่วไป ตัวอย่างเช่นมีทั้งบทเกี่ยวกับการใช้ jQuery (รวมกับ Web2Py) เพื่อสร้างแอปพลิเคชัน AJAX

Weppy

Weppy รู้สึกเหมือนเป็นเครื่องหมายกึ่งกลางระหว่างความเรียบง่ายน้อยที่สุดของ Flask และความสมบูรณ์ของ Django ในขณะที่การพัฒนาแอป Weppy มีความตรงไปตรงมาของ Flash แต่ Weppy มาพร้อมกับคุณสมบัติมากมายที่พบใน Django เช่นชั้นข้อมูลและการตรวจสอบสิทธิ์ ดังนั้น Weppy จึงเหมาะกับแอพที่มีตั้งแต่เรียบง่ายมากไปจนถึงซับซ้อนพอประมาณ

เมื่อมองแวบแรกรหัส Weppy จะดูดีมากเช่น Flask หรือ Bottle code จำเป็นต้องมีคำแนะนำเล็กน้อยเพื่อให้เว็บไซต์พื้นฐานเส้นทางเดียวพร้อมใช้งาน สามารถอธิบายเส้นทางได้ผ่านทางมัณฑนากรฟังก์ชัน (วิธีง่ายๆ) หรือทางโปรแกรมและไวยากรณ์สำหรับการดำเนินการดังกล่าวใกล้เคียงกับ Flask / Bottle Templating ทำงานในลักษณะเดียวกันนอกเหนือจากรูปแบบเล็กน้อยในไวยากรณ์

Weppy แตกต่างกับเฟรมเวิร์กอื่น ๆ โดยรวมคุณสมบัติบางอย่างที่รวมไว้เป็นปลั๊กอินหรือส่วนเสริมเท่านั้น ตัวอย่างเช่น Flask หรือ Bottle ไม่มี ORM ในตัวหรือระบบการจัดการข้อมูล Weppy มี ORM แม้ว่าจะเป็นไปตามโครงการ pyDAL แทนที่จะเป็น SQLAlchemy ที่เป็นที่นิยม Weppy ยังรองรับการย้ายสคีมาซึ่ง Django สนับสนุนเป็นส่วนหนึ่งของ ORM (เช่นกันระบบการย้ายข้อมูลของ Django เป็นระบบอัตโนมัติมากขึ้น) ในขณะที่ Weppy มีกลไกการขยายรายการโปรแกรมเสริมที่ได้รับการอนุมัติอย่างเป็นทางการนั้นมีขนาดเล็กและเล็กกว่าแคตตาล็อกส่วนขยายสำหรับ Flask

เฟรมเวิร์กที่มีน้ำหนักเบากว่าเช่น Weppy มักใช้ในการสร้าง RESTful APIs และ Weppy มาพร้อมกับฟังก์ชันอำนวยความสะดวกสำหรับวัตถุประสงค์นั้น วาง @service มัณฑนากรในเส้นทางและข้อมูลที่คุณส่งคืนจะถูกจัดรูปแบบโดยอัตโนมัติใน JSON หรือ XML ที่คุณเลือก

Weppy มีคุณสมบัติอื่น ๆ ที่ดูเหมือนจะสอดคล้องกับเฟรมเวิร์กที่ใหญ่กว่า แต่ใช้งานได้โดยไม่ต้องใช้จำนวนมาก ตัวอย่าง: กลไกการตรวจสอบข้อมูลการจัดการแบบฟอร์มการแคชการตอบกลับและการตรวจสอบความถูกต้องของผู้ใช้ ในกรณีเหล่านี้ Weppy ใช้แนวทางที่“ เพียงพอ” คุณสมบัติที่ให้มาไม่สมบูรณ์เท่าที่คุณอาจพบในเฟรมเวิร์กขนาด Django แต่นักพัฒนาไม่จำเป็นต้องลงทุนจำนวนมากในการทำให้เป็นประโยชน์และสามารถขยายได้หลังจากความจริง

คุณสมบัติอื่นที่พบใน Weppy มักจะเกี่ยวข้องกับเฟรมเวิร์กรุ่นหนามากขึ้นคือการรองรับความเป็นสากล สตริงในเทมเพลตสามารถแปลได้ตามไฟล์โลแคลที่ให้มาพร้อมกับแอปพลิเคชันซึ่งเป็นพจนานุกรม Python แบบธรรมดา นอกจากนี้ยังสามารถตั้งค่าตัวเลือกของภาษาได้โดยการแยกวิเคราะห์คำขอของเบราว์เซอร์ (นั่นคือส่วนหัว HTTP ที่ยอมรับภาษา) หรือโดยการผูกการแปลกับเส้นทางที่ระบุ

เอกสารประกอบของ Weppy มีรสชาติเดียวกับกรอบ มันสะอาดอ่านได้และเขียนขึ้นเพื่อให้มนุษย์บริโภค นอกเหนือจากตัวอย่างแอป "สวัสดีชาวโลก" ทั่วไปแล้วยังมีบทแนะนำแบบแนะนำที่ดีที่ให้คุณสร้างระบบไมโครบล็อกเป็นโครงการเริ่มต้น

แผนระยะยาวสำหรับ Weppy รวมถึงการสนับสนุน async และซ็อกเก็ตเป็นเอนทิตีระดับต่ำชั้นหนึ่ง นักพัฒนาของ Weppy วางแผนที่จะแนะนำคุณสมบัติเหล่านั้นในเวอร์ชัน 2.0 จากนั้นจึงต้องการ Python 3.7 หรือดีกว่าสำหรับ Weppy เวอร์ชันอนาคตทั้งหมด

ดัชนีชี้วัด ความสามารถดั้งเดิม (20%) การจัดการ (20%) การติดตั้ง (20%) เอกสารประกอบ (20%) ความปลอดภัย (10%) ความสามารถในการปรับขนาด (10%) คะแนนโดยรวม (100%)
ขวด 0.12 8 10 10 8 7 7 8.6
CherryPy 17.0.0 7 9 9 9 8 8 8.4
CubicWeb 3.26.4 10 8 7 10 9 7 8.6
Django 2.1 10 8 8 10 10 10 9.2
เหยี่ยว 1.4.1 7 10 8 8 7 7 8.0
กระติกน้ำ 1.0.2 8 9 8 9 8 8 8.4
พีระมิด 1.9.2 8 8 8 10 9 7 8.4
พายุทอร์นาโด 4.3 8 9 9 8 8 7 8.3
Web.py 0.39 8 8 10 8 9 8 8.5
Web2py 2.16.1 10 9 7 10 9 8 8.9
Weppy 1.2.11 10 8 9 9 10 9 9.1
Wheezy.web 0.1.485 9 9 8 8 8 8 8.4
Zope2 2.13.24 10 8 7 9 9 9 8.6