ประวัติความนิยมของ Django [ปิด]


84

ลำดับเหตุการณ์ใดที่ทำให้ Django เป็นเว็บเฟรมเวิร์ก Python ที่ได้รับความนิยมมากที่สุด .. และยังคงเป็นเช่นนั้น แม้ว่าจะมีกรอบอื่น ๆ อีกมากมาย

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


14
Django เป็นเว็บเฟรมเวิร์ก Python ที่ได้รับความนิยมมากที่สุดเป็นความจริงไม่ใช่ความคิดเห็นส่วนตัว "ลำดับเหตุการณ์" หมายถึงการตัดสินใจในการออกแบบระยะเวลาการตลาดและอื่น ๆ ที่นำไปสู่ความนิยม มันเป็นเรื่องไร้สาระอะไร?
Sridhar Ratnakumar

2
นี่เป็นคำถามที่ดีจริงๆ
Joshua Partogi

ฉันจะรับชมด้วยความสนใจเพื่อเรียนรู้ว่าการตัดสินใจด้านการออกแบบระยะเวลาการตลาด ฯลฯ เป็นที่ทราบกันดีว่ามีความแม่นยำและตรงเวลาเพียงพอที่จะถือเป็น "ประวัติศาสตร์"
John Saunders

ผมไม่เห็นด้วยกับการปิดของคำถามนี้ แต่มันอาจจะดีกว่าในการบริการลูกค้า
Kyle Strand

คำตอบ:


107

ฉันคิดว่ามีปัจจัยบางอย่างซึ่งการรวมกันนั้นมากกว่าผลรวมของน้ำหนักแต่ละตัว

สิ่งหนึ่งคือเวลาเพียงอย่างเดียว: Django ปรากฏตัวในขณะที่คลื่นลูกใหญ่ลูกแรกของ Rails กำลังเพิ่มขึ้นดังนั้นมันจึงถูกแสดงให้เห็นทันทีว่าเป็น "คำตอบของ Python ต่อ Rails" นั่นส่งผลให้มีจำนวนลูกตาที่ไม่สำคัญในโครงการเกือบตั้งแต่เริ่มต้น ข้อเท็จจริงที่ว่าเอเดรียนอยู่ในงานมีตติ้ง "Snakes and Rubies" ที่ชิคาโกและได้มีส่วนร่วมในการพูดคุยแบบเคียงข้างกันเกี่ยวกับ Rails และ Django ก็ทำสิ่งนั้นได้มากมาย

อีกปัจจัยหนึ่งคือ Django เป็นและติดตั้งแบบแพ็คเกจเดียวมาโดยตลอด (ดีไม่มาก: คุณยังต้องใช้อะแดปเตอร์ฐานข้อมูลเว้นแต่คุณจะใช้ Python 2.5+ และใช้ SQLite แต่ก็ใกล้พอ) ทางเลือกอื่นที่ไม่ใช่ Zope ซึ่งทั้งหมดมุ่งเน้นไปที่การปล่อยให้ตัวเลือกส่วนประกอบอยู่ในมือของผู้พัฒนานั้นต้องการการทำงานอีกเล็กน้อยเพื่อไปให้ถึงจุดที่คุณสามารถทำแบบฝึกหัดพื้นฐานได้: คุณต้องออกตามล่า ORM ภาษาเทมเพลต ฯลฯ ฯลฯ และติดตั้งและกำหนดค่าทั้งหมด แม้ว่าจะดีขึ้นมากในช่วงหลายปีที่ผ่านมา แต่ฉันคิดว่าความทรงจำที่ยังคงอยู่ในนั้นยังคงมีผล

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

ฉันยังคิดว่ามีการรับรู้ - ถูกหรือผิด - กล่าวว่า Pylons หรือ Werkzeug นั้นดีกว่าสำหรับนักพัฒนาที่มีประสบการณ์ซึ่งรู้วิธีการใช้งาน WSGI และระบบนิเวศของเว็บ Python แล้ว ความจริงที่ว่าพวกเขามักจะเป็นตัวเลือกที่ดีในการนำไลบรารีโปรดที่คุณมีอยู่มาเชื่อมต่อเข้าด้วยกันเป็นที่มาของสิ่งนี้ฉันคิดว่าและอาจจะกระตุ้นคนรุ่นใหม่ ๆ ให้เข้าหาแนวทางแบบบูรณาการของ Django แน่นอนว่าในทางกลับกันก็คือผู้คนจำนวนมากที่ควรเรียนรู้ล่วงหน้าก่อนที่จะลอง Django จะไม่ทำเช่นนั้น)

ในที่สุดฉันคิดว่ามีบางอย่างที่ต้องพูดเกี่ยวกับวิธีการวางตลาดของ Django ซึ่งก็คือการบอกว่ามันไม่ได้ทำการตลาดมานานหรืออย่างน้อยก็ไม่ใช่ในแง่ที่พูดว่า Rails วางตลาด จนกระทั่ง Django 1.0 เข้าสู่ตลาดความพยายาม "การตลาด" ส่วนใหญ่ประกอบด้วยผู้คนบล็อก (และมีเหตุการณ์ที่น่าสังเกตบางอย่างที่ผู้คนถูกขอให้ลดเสียงลงเล็กน้อย) พูดคุยที่ PyCon จากนั้นส่วนใหญ่ก็แค่ปรับปรุงกรอบสร้างสิ่งที่ยอดเยี่ยมด้วย และปล่อยให้ผลลัพธ์เป็นตัวของตัวเอง แน่นอนว่าในโลกยุคหลัง 1.0 เรามี DSF และ DjangoCon และที่ปรึกษาที่มุ่งเน้นธุรกิจที่ทำการฝึกอบรมและหนังสือมากมายและที่เหลือทั้งหมด แต่นั่นก็ยังค่อนข้างใหม่

ฉันคาดหวังว่าจะมีฟันเฟืองเหมือนที่เคยมีมากับ Rails และอันที่จริงฉันคิดว่ามันได้รับการผลิตมาระยะหนึ่งแล้วและได้เริ่มต้นแล้ว แต่จนถึงตอนนี้ฉันคิดว่าปัจจัยที่ฉันระบุไว้ที่นี่อย่างน้อยก็เป็นปัจจัยหลักที่อยู่เบื้องหลังการเติบโตอย่างต่อเนื่องของความนิยมที่ Django ได้เห็นตั้งแต่เปิดตัวครั้งแรก


31
ไม่จำเป็นต้องเจียมเนื้อเจียมตัว: คุณภาพและปริมาณของเอกสารของ Django เป็นข้อดีอย่างมากสำหรับมัน ทำได้ดีทั้งหมด
Ned Deily

1
"จนกว่า Django 1.0 จะมาถึงความพยายาม" การตลาด "ส่วนใหญ่มาจากการที่คนเขียนบล็อก ... " คุณลืมหนังสือสองเล่มที่ตีพิมพ์ (เช่นในผลงานเป็นเวลานาน) ก่อนหน้า 1.0 หนึ่งในนั้นเป็นของคุณหรือไม่? ดูเหมือนจะเป็นการตลาดที่หนักหน่วงสำหรับฉัน
Cristian

9
หนังสือสองเล่มไม่ได้ "ทำการตลาดหนัก" อย่างน้อยสำหรับฉัน และพูดตามตรงฉันอยากจะปิดของฉันไว้จนกว่า 1.0 จะหมดถ้าเพียงเพราะมันจะทำให้ชีวิตของฉันง่ายขึ้นเล็กน้อย
James Bennett

4
คุณควรพูดถึงการมีส่วนร่วมของคุณกับ Django เนื่องจากบล็อกของคุณยังไม่เป็นที่รู้จักกันดี ฉันจำได้ว่าคุณเคยเขียนบางอย่างเกี่ยวกับเรื่องนี้มาก่อนแม้ว่าฉันจะไม่พบ atm ลิงก์
Xiong Chiamiov

7
มันค่อนข้างง่ายที่จะคลิกที่ชื่อของฉันและดูว่าฉันเป็นใคร
James Bennett

112

เฟรมเวิร์กเว็บ Python จำนวนมากมีอยู่แล้วเมื่อ Django ปรากฏตัวในปี 2548 ซึ่งเป็นเรื่องตลกที่เกิดขึ้นแล้วในตอนนั้น Python เป็น "ภาษาที่มีเว็บเฟรมเวิร์กมากกว่าคีย์เวิร์ด" (และ Guido ปฏิเสธข้อเสนอของฉันที่จะแก้ไขใน Py3k โดย เพิ่มคำหลักอื่น ๆ อีกมากมาย) ตอนนี้ "django" ต่อ se มีความคลุมเครือเล็กน้อยเนื่องจากเป็นคำค้นหา (ยังเป็นชื่อของนักเล่นกีตาร์ยอดนิยมที่มีชีวิตเป็นแรงบันดาลใจให้กับภาพยนตร์ Woody Allen ฯลฯ ) อย่างไรก็ตามการเพิ่ม "python" ในการค้นหาเพื่อลบความหมายอื่น ๆ คุณสามารถดูเช่นในกราฟนี้ความนิยมสัมพัทธ์เปลี่ยนไปอย่างไรเมื่อเทียบกับเฟรมเวิร์กเว็บ Python แบบคลาสสิกอื่น Zope ส่วนใหญ่เติบโตอย่างต่อเนื่องในไตรมาสต่อไตรมาสโดยเพิ่มขึ้นอย่างน่าประหลาดใจเมื่อต้นไตรมาสที่ 2 ปี 2008 ... ซึ่งเพิ่งเกิดขึ้นตรงกับวันที่ Google ประกาศ App Engine (เป็นไปไม่ได้ที่จะพิสูจน์สาเหตุในกรณีนี้ แต่ความบังเอิญก็คือ อย่างน้อยก็น่าสนใจ ;-)

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

บางครั้ง Django ถูกวิพากษ์วิจารณ์ (รวมถึง ... ของคุณอย่างแท้จริง ;-) ว่า "ขลังเกินไป" หรือ "เสาหินเกินไป" เมื่อเทียบกับทางเลือกอื่น ๆ เช่น Pylons, TurboGears, Werkzeug, & c ซึ่งมีน้ำหนักเบากว่า (โดยเฉพาะอย่างหลัง รายการโปรดของฉัน ;-) โปร่งใสมากขึ้นและช่วยให้การสลับเข้าและออกจากส่วนประกอบเฉพาะได้ง่ายขึ้น (ORM, เทมเพลต, & c) อย่างไรก็ตามความนิยมของ Django บอกเราว่าสำหรับคนส่วนใหญ่ที่สนใจในการพัฒนาเว็บไซต์และแอพฝั่งเซิร์ฟเวอร์ตัวเลือกการออกแบบ Django เหล่านี้ถูกมองในแง่บวก: Django ถูกมองว่าเป็นเฟรมเวิร์กที่สมบูรณ์และบูรณาการอย่างดี (และมีส่วนเสริมมากมาย - ons และ "ปลั๊กอิน" ที่สนับสนุน แต่สิ่งเหล่านี้เป็นผลที่มากกว่าสาเหตุของการมีอำนาจวาสนา)

ความง่ายในการเริ่มต้น "หน้าผู้ดูแลระบบ" แบบอัตโนมัติและสิ่งที่คล้ายกัน - รวมถึงข้อเท็จจริงที่ว่า Django สามารถสร้างเว็บไซต์ / แอปที่สมบูรณ์และซับซ้อนและรองรับความต้องการที่แปลกประหลาดหรือไม่ซ้ำใครด้วยทักษะและการทำงานบางอย่าง - น่าจะเป็น "คุณลักษณะนักฆ่า" ในการใช้ Werkzeug ให้ดีที่สุดคุณต้องเข้าใจ HTTP และ WSGI และเลือกและรวมพื้นที่จัดเก็บและเทมเพลตที่คุณชื่นชอบ - ผู้พัฒนาเว็บไซต์และแอปที่ใช้ Python (เช่นในแง่หนึ่งผู้ใช้ Rails หรือผู้ใช้ PHP ที่ได้รับความนิยมมากยิ่งขึ้น! -) คือ "การโหวตด้วยส่วนแบ่งความคิด" สำหรับสภาพแวดล้อมที่พวกเขาไม่จำเป็นต้องทำสิ่งนั้น แต่ส่วนใหญ่สามารถเน้นที่โดเมนแอปพลิเคชัน ฉันจะต้องยอมรับว่าพวกเขาอาจจะมีจุด ;-)


3
ฉันคิดว่าจากความนิยมของ Django ความคุ้นเคยกับมันจะตอบสนองคุณได้ดี ที่ไม่ได้กีดกันการใช้ repoze.bfg, werkzeug ฯลฯ เมื่อเหมาะกับแอปหรือไซต์ที่ดีกว่า คุณสามารถสร้างโปรเจ็กต์กึ่งของเล่นตั้งแต่เริ่มต้นได้ในแต่ละโปรเจ็กต์หากคุณมีเวลาพอสมควรและด้วยเหตุนี้จึงได้รับความชื่นชมอย่างลึกซึ้งต่อความแข็งแกร่งและจุดอ่อนที่ทำให้เหมาะสมมากขึ้นหรือน้อยลงขึ้นอยู่กับสิ่งที่โครงการนั้นเกี่ยวข้อง (ฉันต้องยอมรับ ฉันไม่มีประสบการณ์โดยตรงในโลกแห่งความเป็นจริงกับ repoze.bfg ... )
Alex Martelli

1
@Triptych ไม่ใช่เหตุผลเดียวอย่างชัดเจนเนื่องจากเฟรมเวิร์กอื่น ๆ ( ไม่ใช่ เฟรมเวิร์กใด ๆ : คิดว่า Zope เช่น! -) อาจใช้ได้ตามที่กำหนด ฉันเดาว่าความคิดของฉันเกี่ยวกับข้อดีสำหรับนักพัฒนาแอป / ไซต์ของเฟรมเวิร์กที่รวมเข้าด้วยกันอย่างสมบูรณ์และค่อนข้าง "วิเศษ" อาจส่งผลต่อการตัดสินใจว่าจะเสนอการสนับสนุนหลักสำหรับอะไร (เช่นทำให้พร้อมใช้งานโดยอัตโนมัติโดยไม่ต้องอัปโหลดผู้ใช้)
Alex Martelli

1
@cletus, Java มีคำหลัก 50 คำต่อjava.sun.com/docs/books/tutorial/java/nutsandbolts/… , Python 2.6 มี 31 ตัวต่อlen(keyword.kwlist)- เช่นชื่อประเภทไม่ใช่คีย์เวิร์ดใน Python เป็นต้น
Alex Martelli

34
ฉันคิดว่าคุณพลาดจุดสำคัญ เอกสารของ Django ดีกว่าเฟรมเวิร์ก Python ใด ๆ (และดีกว่าเอกสารราง IMO)
agiliq

6
@ อเล็กซ์ฉันสงสัยว่ามีใครอ่านเอกสารเริ่มต้นจนจบจริง ๆ แต่คนส่วนใหญ่เมื่อพวกเขามีปัญหาในการค้นหาโดย Google ความสามารถในการหาคำตอบภายใน 5 นาทีโดยใช้เอกสารที่ดูดีแทนที่จะใช้เวลา 1 ชั่วโมงในการค้นหาผ่านบล็อกโพสต์เป็นข้อดีอย่างมาก (อย่างน้อยก็จนถึง StackOveflow ซึ่งทำให้การถามคำถามโง่ ๆ ง่ายขึ้นมาก)
Edan Maor

22

ฉันนึกถึงเหตุผลสามประการสำหรับความนิยมของ Django ซึ่งมีเพียงหนึ่งในคำตอบที่ได้รับการกล่าวถึงในคำตอบอื่น ๆ เท่าที่ฉันเห็น:

  1. เอกสารประกอบ. มีโครงสร้างที่ดีครอบคลุมและเข้าถึงได้จากระดับความสามารถหลายระดับ

  2. ออกแบบ. การออกแบบภาพของผู้ดูแลระบบหน้าข้อผิดพลาดและไซต์โครงการอยู่เหนือระดับการออกแบบที่เห็นได้จากโครงการโอเพ่นซอร์สส่วนใหญ่

  3. การสนับสนุนจากชุมชน เริ่มต้นด้วยทีมที่ World Online Django เลือกผู้ประกาศข่าวประเสริฐที่มีอิทธิพลในช่วงต้น ฉันไม่แน่ใจว่าคุณสามารถระบุความสำคัญของบล็อกโพสต์เช่น Django for Non-Developers ของ Jeff Croft ได้ (ฉันคิดว่านั่นคือชื่อ)


13

"รายการโปรดส่วนตัวของฉันและฉันคาดหวังว่าสิ่งนั้นจะยังคงเป็นที่ชื่นชอบส่วนตัวไปอีกนานคือสิ่งที่ชื่อ Django" - Guido Van Rossum ใน FLOSS รายสัปดาห์ตอนที่ 11 ออกอากาศ 4 สิงหาคม 2549

[คลิกที่นี่] (ฟังสามคนสุดท้ายของบทสัมภาษณ์)

คิดว่าสิ่งนี้อาจช่วยได้หรือไม่? หรืออย่างน้อยเหตุผลที่ Google เลือกใช้ AppEngine?

แน่นอนว่าชุมชน django (รวมถึงนักพัฒนาซอฟต์แวร์) กำลังทำสิ่งที่ถูกต้องมากมาย ตัวอย่างเช่น (การวิเคราะห์บางส่วนในลิงก์):

การปรับปรุงโมดูลาร์: [คลิกที่นี่]

เอกสาร kick ass คลิกที่นี่

นอกจากนี้ยังมีบางอย่างเกี่ยวกับชุมชนที่ทำให้ผู้คนอยากมีส่วนร่วมซึ่งฉันยังไม่ได้ลอง คลิกที่นี่

แน่นอนว่าทั้งหมดนี้ทำให้ Django เป็นคนนอก: คลิกที่นี่

ไม่มีคำถามเกี่ยวกับความนิยมของ Django


1
ฉันคิดว่าคำตอบนี้ให้คำตอบที่คนอื่นไม่ชอบ ผู้คนจำนวนมากเข้าไปใน Django แบบสุ่มสี่สุ่มห้าเนื่องจากความคิดเห็นนั้น
Jorge Vargas

ไม่มีอะไรผิดปกติกับการทำสุ่มสี่สุ่มห้าเมื่อ Guido อธิบายเช่นนี้ ฉันทำและไม่เคยมองย้อนกลับไปตั้งแต่นั้นมา
ขึ้น.

3

ในกรณีของฉันฉันซื้อหนังสือ TurboGears และต่อสู้กับความไม่สอดคล้องกันและเส้นทางที่ไม่เป็นระเบียบในการอธิบายสิ่งต่างๆ จากนั้นฉันก็ได้หนังสือ Django และ voila! โปรเจ็กต์แบบจ่ายเงินโครงการแรกของฉันถูกสร้างขึ้นในขณะที่ทำงานผ่านโครงการตัวอย่างในหนังสือ บวกกับเอกสารออนไลน์ปิดผนึกข้อตกลง สำหรับฉันมันง่ายมาก: เอกสารเอกสารเอกสารประกอบ


2

ฉันสังเกตว่ามันมักจะได้รับการเลื่อนตำแหน่งให้เทียบเท่า Ruby on Rails ใน Python นอกจากนี้ยังมีการเชื่อมต่อกับ Google (Google เป็นเจ้าภาพจัดกิจกรรม Django และสนับสนุนใน App Engine) กรอบงานเว็บที่ Google รับรองจะต้องมีค่าใช้จ่ายบางอย่าง :)


2
แน่นอน แต่ GAE มาช้ากว่าในกระบวนการนี้ และ Django ก็ได้รับความนิยมแล้ว
Sridhar Ratnakumar

1
@Sridhar ใช่ - ฉันทำทั้งสองข้อในคำตอบของฉัน: GAE ทำให้ Django ได้รับความนิยมอย่างมากในวันที่ประกาศ ... แต่นั่นก็เป็นแนวโน้มการเติบโตที่มั่นคง
Alex Martelli

2

อย่างน้อยสำหรับฉันปัจจัยสำคัญคือ Simon Willison และ Adrian Holovaty เป็นที่รู้จักกันดีอยู่แล้วในฉาก "Web Standards" เช่นเดียวกับ Jeff Croft ในเวลาต่อมา

นั่นไม่ได้เป็นเพียงตราประทับที่มีคุณภาพ แต่ยังทำให้ Django เป็นมิตรกับเว็บด้วยความเคารพต่อ HTTP, มาร์กอัปและแม้แต่วิธีการทำงาน "การดีบักการพิมพ์" ที่รวดเร็วและสกปรกซึ่งผู้ที่มาจาก PHP เคยชิน

ฉันอาจจะคิดผิดอย่างมากที่นี่ไม่มีข้อมูลสำรอง แต่ฉันรู้สึกว่า Django ได้รับแรงฉุดจากผู้คนที่มาจาก PHP มากกว่าเมื่อเทียบกับ Rails ซึ่งได้รับการแปลงจาก Java / .NET เป็นจำนวนมาก

ดังที่คนอื่น ๆ ได้กล่าวไว้แล้วเอกสารประกอบนั้นสูงกว่าค่าเฉลี่ย ดีที่สุดที่ฉันเคยเห็นเท่าที่ฉันจำได้


0

ความจริงที่ว่ามีเว็บไซต์จำนวนมากที่ใช้ Django อยู่แล้ว (เช่น lawrence.com เป็นต้น ... ) แม้ในช่วง 0.96 วันก็ช่วยให้ฉันโน้มน้าวผู้บริหารได้ว่าปลอดภัยที่จะใช้ สิ่งต่างๆเช่น Pylons และ Turbogears ไม่ได้มีอย่างนั้นจริงๆ


1
โชคดีที่วันนั้นสิ้นสุดลงตอนนี้ pylons มี reddit.com และ sourceforge (ผ่าน turbogears)
zzzeek

Pylons ยังไม่ถึง 1.0 ซึ่งฉันคิดว่า (ยังไม่ได้ตรวจสอบ) หมายความว่าพวกเขาขาดสัญญาเสถียรภาพ API ของ Django
Xiong Chiamiov

-1

ในฐานะที่เป็นสำหรับความนิยมของ Django ในช่วงเวลา (ความหมายที่แท้จริงของชื่อคำถามของคุณถ้าไม่มากคำถามที่เกิดขึ้นจริงของคุณ) มีลักษณะที่เป็นแนวโน้มของ Google


1
เทรนด์ลิงค์ไม่ถูกต้อง ตามที่ @Alex Martelli ชี้ไว้คุณต้องเอามือกีตาร์ออกมา
Jorge Vargas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.