[เล่นเพลง] EZRA ZIGMOND: สวัสดีทุกคน ขอบคุณสำหรับการที่ออกมาในวันนี้ งานสัมมนาครั้งนี้คือ "งูใหญ่ Web Apps กับขวด. " ดังนั้นฉันจะพูดคุย นิด ๆ หน่อย ๆ เกี่ยวกับสาเหตุ คุณอาจต้องการที่จะใช้ขวดที่จะทำให้ ปพลิเคชันเว็บที่มีงูหลาม, ตรงข้าม บางส่วนกรอบอื่น ๆ ออกมีเช่น Django ซึ่งเป็นส่วนใหญ่ที่รู้จักกันดี คำบรรยายที่เป็น "และ แคระ "ซึ่งเป็นสิ่งที่ ที่เรากำลังจะพูดคุยเกี่ยวกับวิธีการ ในการโต้ตอบกับฐานข้อมูล SQL มันทำให้ดีจริงๆ ดังนั้นนี่เป็นเพียงบทสรุปอย่างรวดเร็ว ของสิ่งที่ฉันต้องการที่จะไปมากกว่า ดังนั้นก่อนเพียงหนึ่งสไลด์ ที่จะเป็น QuickStart, ซึ่งเป็นวิธีการที่จะได้รับทุกอย่าง ตั้งอยู่บนเครื่องคอมพิวเตอร์ของคุณ ฉันจะแสดงให้เห็นถึง นี้บนเครื่อง Mac ของฉันท้องถิ่น เพียงเพราะนั่นคือสิ่งที่ฉันได้กระทำนี้ ก่อนที่ผมสะดวกสบายมากที่สุดกับมัน แต่นี้เป็นมั่นเหมาะ ที่เป็นไปได้ใน CD50 IDE ดังนั้นหลังจากที่ผมต้องการที่จะ แนะนำสิ่งที่เป็นขวด และโน้มน้าวให้คุณว่าทำไมคุณควร ใช้ในสถานที่แรก แล้วฉันจะให้ได้อย่างรวดเร็ว ตัวอย่างของสิ่งที่คุณ สามารถทำได้ในขวดตัวอย่างรวดเร็ว ของสิ่งที่คุณสามารถทำได้ในแคระ, แล้วฉันจะแสดงให้คุณมากขึ้น แอพลิเคชันตัวอย่างที่สมบูรณ์ ที่ฉันใส่กันว่าเรา สามารถเดินผ่านด้วยกัน และแล้วในที่สุด สไลด์สุดท้ายที่ฉันมี ทรัพยากรบางอย่างที่คุณมอง ที่ออนไลน์สำหรับข้อมูลเพิ่มเติม นี้ไม่ได้เป็นที่สมบูรณ์แบบ การกวดวิชาของวิธีการใช้ขวด และฉันจะหวังว่าจะออกจาก บางครั้งคำถาม ดูทุกคนในประเทศเพียง เหมือนตะโกนออกมาอยู่ตรงกลาง ถ้าคุณมีคำถามใด ๆ. ดังนั้นสิ่งที่ติดตั้งได้อย่างรวดเร็ว ถ้าคุณต้องการที่จะทำตาม หรือถ้าคุณต้องการที่จะได้รับนี้ ขึ้นบนเครื่องของคุณเอง ฉันจะใช้งูหลาม 2.7.10 กระติกน้ำไม่ทำงานกับ งูหลาม 3 แต่ผมชอบ ใช้งูหลาม 2 เพราะมี บางแพคเกจที่งูหลาม ไม่ได้ทำงานกับ 3 ยัง หากคุณติดตั้ง pip ซึ่ง เป็นผู้จัดการแพคเกจหลาม, ผมคิดว่าถ้าคุณเป็นงูหลาม มากกว่าหรือเท่ากับ 2.7.9, คุณมีมันติดตั้งอยู่แล้วก็ ซุปเปอร์ง่ายที่จะติดตั้งแพคเกจเหล่านี้ คุณสามารถทำจุดติดตั้ง กระติกน้ำ, ติดตั้งจุดเล็กแคระ, ปกติคุณต้องใช้ sudo เพียง เพื่อให้สิทธิ์ในการทำงานออก และถ้าคุณกำลังใช้ ซุปเปอร์รุ่นเก่าหลาม ผมขอแนะนำให้ปรับปรุงหลามของคุณ หรือใช้ในการติดตั้ง EasyInstall pip ดังนั้นคำถามต่อไปคือสิ่งที่เป็นขวด? และผมคิดว่าเป็นครั้งแรก คำถามที่เหมาะสมผมสงสัย เป็นเวลานานคือสิ่งที่เป็น app เว็บหรือไม่ เพราะนั่นคือคำที่ฉัน คิดจะโยนรอบมาก ที่ผมไม่ทราบจริงๆ และผมคิดว่าสิ่งที่ดีที่สุด ตัวอย่างของสิ่งที่ app เว็บคือ จริงๆเป็น CS50 การเงินที่ มันไม่ได้จริงๆเพียงแค่เว็บไซต์ แต่มันเป็นสิ่งที่คุณ การเรียงลำดับของสามารถโต้ตอบกับ มีบัญชีผู้ใช้และ ทุกประเภทของสิ่งที่แตกต่างกัน ดังนั้นที่ว่าคุณวาด เส้นแบ่งระหว่างสิ่งที่เป็นเว็บไซต์ และสิ่งที่เป็น app เว็บจะเรียงลำดับของ โดยพลการ แต่ผมคิดว่าความคิด มันเป็นอะไรที่ดีกว่าเว็บไซต์ และมันเป็นโปรแกรมที่มีประโยชน์ ดังนั้นขวดเป็นกรอบสำหรับ ทำให้ปพลิเคชันเว็บใช้งูหลาม และหวังว่าในตอนท้าย นี้ผมจะโน้มน้าวให้คุณ จริงที่คุณสามารถเขียนบางสิ่งบางอย่าง เช่น CS50 การเงินใช้งูหลามซึ่งผม ชอบมากดีกว่า PHP ส่วนตัว ดังนั้นขวดคือพวกเขาเรียกว่า microframework โดยที่ พวกเขาหมายถึงมันมาก ที่เรียบง่าย แต่ขยาย ดังนั้นจึงมีเพียงแค่สิ่งที่คุณต้องการ แต่ถ้าคุณต้องการคุณสมบัติมากขึ้น มันเป็นเรื่องง่ายที่จะนำพวกเขาใน แต่เพียงเพราะมันเป็น microframework, ไม่ได้ หมายความว่ามันเป็นเพียงสำหรับโครงการขนาดเล็ก ฉันมีการเชื่อมโยงที่นี่ที่บอกว่า ว่าโอบามาใช้ขวดในปี 2012 สำหรับการหาเสียงของเขา เว็บไซต์ซึ่งหวังว่า เป็นสิ่งที่รับรอง แต่สิ่งที่ผม ชอบเกี่ยวกับขวด คือว่ามันไม่ได้ทำจริงๆ การเรียงลำดับของการตัดสินใจใด ๆ สำหรับคุณ เพียงเพราะเรา พูดคุยเกี่ยวกับปพลิเคชันเว็บ ฉันต้องเปรียบเทียบกับ Ruby on ทางรถไฟและ Django ซึ่งทั้งสองอย่าง เป็นกรอบที่ดี แต่ พวกเขาทั้งสองทำให้สมมติฐาน เกี่ยวกับวิธีที่คุณต้องการ โต้ตอบกับฐานข้อมูล วิธีที่คุณต้องการที่จะนำเสนอของคุณ มุมมองและพวกเขากำลังแน่นอน แง่มุมที่ดีในการที่ ยกตัวอย่างเช่น Ruby on Rails มีระบบนี้บันทึกการใช้งาน ซึ่งเป็นที่ดีจริงๆ วิธีการโต้ตอบกับข้อมูล แต่ถ้าคุณต้องการที่จะใช้ Ruby on ทางรถไฟที่คุณกำลังเชื่อมโยงการจัดเรียงของเข้าที่ แต่ด้วยขวดที่ผมจะ แสดงให้คุณกับคนแคระ, คุณสามารถใช้สิ่งที่จัดเรียง ของฐานข้อมูลที่คุณต้องการ และคุณก็สามารถดึงว่าใน เป็นส่วนขยายเข้าไปในขวด เพื่อที่ว่าทำไมผม เช่นขวดก็ว่ามัน ไม่ได้ทำให้สมมติฐานสำหรับคุณ ขึ้นอยู่กับสิ่งที่คุณไม่ต้องการจริงๆ ดังนั้นทำไมคุณควรใช้ขวด? ข้อดีก็แค่ จริงๆมีคุณสมบัติหลัก ในตัวมันที่คุณต้องการ ดังนั้นคุณไม่ต้องกังวลเกี่ยวกับ การทำความเข้าใจทั้งกลุ่มของสิ่งที่ ที่คุณไม่ต้องการจริงๆ คุณไม่จำเป็นที่จะต้องกังวล เกี่ยวกับการปิดคุณลักษณะ ที่คุณไม่ต้องการจริงๆ และที่ผมกล่าวถึงก็สุด ง่ายต่อการเพิ่มในส่วนขยายของสิ่งที่ ที่คุณจะต้อง บางส่วนของพวกเขามีขวด การสนับสนุนของตัวเองสำหรับมัน จึงมีสิ่งที่เรียกว่าขวด ผู้ดูแลระบบซึ่งสะท้อนว่าผู้ดูแลระบบ แผงที่ Django ให้ ซึ่งจะช่วยให้คุณเป็นวิธีที่ดีที่มองเห็น ที่จะจัดการกับเว็บไซต์ของคุณ แต่อีกครั้งถ้าคุณ สิ่งที่ทำง่าย คุณอาจไม่จำเป็นต้องมีผู้ดูแลระบบขนาดใหญ่ แผงดังนั้นผมคิดว่าเป็นเรื่องดีที่สุด และข้อเสียคือว่า คุณมีอำนาจน้อยออกจากกล่อง ดังนั้นเมื่อคุณเปิดขวด และในโปรแกรมหลามของคุณ คุณเพียงแค่พิมพ์จากขวด * นำเข้าหรืออะไรก็ตาม คุณไม่ได้ว่าได้รับทั้งหมดของ คุณสมบัติที่คุณอาจต้องการ และเพื่อให้คุณได้มากขึ้นอย่างชัดเจน รายการคุณสมบัติที่คุณต้องการ เพื่อให้เป็นข้อเสียอย่างหนึ่ง แต่ฉัน คิดว่าสำหรับการสร้างเว็บที่มีขนาดเล็ก ปพลิเคชันเหมือนฉันกำลังจะถูกแสดง คุณว่าไม่จริงปัญหา และสิ่งที่เป็นสิ่งสุดท้ายคือ ควรที่จะพูดซึ่งเป็นพิมพ์ผิด, คือว่ามีมาตรฐานน้อย การประชุมสำหรับวิธีการใช้ขวด เพียงเพราะมีไม่มากเท่าที่ คนที่ใช้มันอย่างมืออาชีพ เมื่อเทียบกับ Django ดังนั้นถ้าคุณมีลักษณะบางอย่างเช่น "ฉันจะทำ x" ใน Django, คุณอาจจะพบว่ามัน มีการออกแบบที่ดี รูปแบบที่คุณสามารถใช้ แต่ด้วยขวดก็ การเรียงลำดับของไปทางของคุณเอง เพียงเพราะมันเป็น ห้องสมุดขนาดเล็กสวย ดังนั้นผู้ที่มี ข้อเสีย แต่ฉันคิดว่า ว่ามันยังคงเป็นห้องสมุดที่ดีที่จะใช้ เพื่อให้เพียงกระโดดลงในขวด นี้แน่นอนไม่ได้ไป จะเป็นกวดวิชาที่สมบูรณ์ แต่ก็เพื่อให้คุณคิดว่า ของวิธีการโครงสร้างสิ่ง และเพื่อให้คุณรู้สึกสะดวกสบายไป ออกและมองไปที่เอกสาร และหาข้อมูลเพิ่มเติม ดังนั้นให้ฉันเปิดขึ้นจริงๆ ตัวอย่างง่ายๆในตอนแรก และแสดงสิ่งที่ ดูเหมือนว่าแล้วเราจะ ทำลายมันลงนิด ๆ หน่อย ๆ ดังนั้นที่นี่ให้ฉันได้รับมันทำงาน ดังนั้นตอนนี้ผมมีใบสมัครของฉันทำงาน ฉันจะเปิดซาฟารีและ มันทำงานบนโฮสต์ท้องถิ่นของฉัน ดังนั้นฉันแค่จะทำให้ใหญ่กว่านี้ แต่ localhost: 5000 ดังนั้นตอนนี้ทั้งหมดนี้ไม่ คือเมื่อคุณเยี่ยมชมเว็บไซต์ที่ จะพิมพ์ออก "สวัสดีขวด" ซึ่งไม่เป็นประโยชน์สุด แต่ฉันคิดว่ามันเป็นเย็นที่ ในไฟล์เล็ก ๆ น้อย ๆ ที่นี่ เรามีเว็บเซิร์ฟเวอร์ที่ทำงาน ที่พิมพ์ออกบางสิ่งบางอย่าง ดังนั้นขอเป็นจริงการมอง รหัสเป็นครั้งที่สองที่ และทำลายมันลงเล็กน้อย คือขนาดที่ดีสำหรับทุกคนที่นี่? ดังนั้นหวังว่าคุณบ้าง สะดวกสบายใช้งูหลาม ฉันสมมติว่าเราสามารถมองไปที่ งูหลามและอ่านผ่านมัน หากคุณมีคำถามใด ๆ เกี่ยวกับ อะไรที่ฉันยังสามารถไปกว่าที่ ดังนั้นบรรทัดแรกคือจากขวด เรานำเข้า, กระติกน้ำที่มีทุน "F" ซึ่งเป็นประเภทของทุก คุณสมบัติที่สำคัญที่คุณต้องการ เมื่อใดก็ตามที่คุณเขียน ไฟล์และการใช้ขวด คุณจะต้องการนำเข้าที่ เพียงเพราะที่มีทุกสิ่งที่สำคัญ สิ่งต่อไปที่เราทำคือเรา โทรขวดฟังก์ชั่นนี้เพียง เพื่อสร้างวัตถุการตรวจสอบและคุณ มักจะต้องการที่จะทำเช่นนั้น แล้วกระโดดลงไป ด้านล่างได้อย่างรวดเร็วส่วนนี้ที่นี่คือ 'if_name _ == "_ main_" ซึ่งเป็น การเรียงลำดับของการประชุมหลาม ดังนั้นนี้จะดำเนินการถ้าคุณ เรียกใช้แฟ้มนี้โดยตรงโดยใช้งูหลาม จากนั้นเราเรียก app.run ซึ่งจะ จะเริ่มต้นการตรวจสอบไป ดังนั้นที่โครงสร้างหลักที่ คุณจะมีในการประยุกต์ใช้ขวดใด ๆ คือคุณจะมีนี้ แอปพลิเค = ขวด (_NAME_) แล้ว app.run ดังนั้นสองสิ่งที่ฉันมี ในที่นี่คือสิ่งที่เราเรียกเส้นทาง ดังนั้นขอพูดคุยเกี่ยวกับ เส้นทางนิด ๆ หน่อย ๆ ฉันจะกลับไปที่ภาพนิ่ง ดังนั้นพื้นฐานที่สุด แนวคิดในขวดเป็นเส้นทาง และมันก็เป็นความคิดที่ว่าคุณ กำหนดฟังก์ชั่นในหลาม ไปยังที่อยู่โดยเฉพาะอย่างยิ่ง ในหน้าเว็บของคุณ ดังนั้นเมื่อใดก็ตามที่คุณต้องการ เพื่อสร้างเส้นทางใหม่ คุณใช้นี้ @ app.route มัณฑนากรฟังก์ชั่น ดังนั้นถ้าคุณไม่คุ้นเคยกับ ฟังก์ชั่นตกแต่งในหลาม, มันเป็นแนวความคิดนี้ว่า ช่วยให้คุณสามารถใช้ฟังก์ชั่น และล้อมรอบมันกับสิ่งอื่น ดังนั้นจริงๆสิ่งที่มัณฑนากรนี้ไม่ คือว่ามันต้องใช้ฟังก์ชั่นด้านล่างมัน และจะเพิ่มข้อมูลเพิ่มเติม ไป แต่สิ่งที่ขวดจริง ไม่ทำให้มันเกิดขึ้นไม่สุด สิ่งสำคัญ แต่สิ่งที่เป็นสิ่งที่สำคัญ คือก่อนที่เส้นทางที่คุณ ใส่นี้ app.route @ แล้ว ที่อยู่ของเส้นทางที่ ดังนั้นเฉือนเป็นสิ่งที่เรา เมื่อเราเห็นเพียงแค่เปิดหน้าเว็บ เพื่อให้เป็นหน้าแรก มันเป็นเพียงเส้นทางเฉือน แล้วคุณจะมีฟังก์ชั่นนี้ ชื่อของฟังก์ชั่น สามารถเป็นสิ่งที่คุณต้องการ มันไม่จำเป็นต้อง จะทำอย่างไรกับเส้นทาง และแล้วสิ่งที่ ฟังก์ชั่นการกลับมาของ ฟังก์ชั่นควรจะกลับสตริง และสตริงที่สามารถ มี HTML หรืออะไร และที่เป็นจริงสิ่งที่จะได้รับ กลับไปยังเว็บเบราเซอร์ของคุณเป็น HTML, และมันจะทำให้ที่ ดังนั้นนี้เป็นรหัสเดียวกัน ที่ได้รับจากตัวอย่าง ที่ฉันเพิ่งวิ่งดังนั้นเมื่อเราไปเฉือน เรียกฟังก์ชั่น Hello World ซึ่ง เพียงแค่ส่งกลับสตริงสวัสดีขวด และที่ได้รับการพิมพ์บนหน้าจอ ดังนั้นจึงมีอีกตัวอย่างหนึ่ง ซึ่งก็คือเมื่อคุณเยี่ยมชม / สวัสดี จะพิมพ์ออกมาสวัสดี Word, ซึ่ง จริงควรจะพูดว่าสวัสดีโลก แต่ให้หลอกว่าเป็นความจงใจ ดังนั้นขอดึงขึ้นจริงอย่างรวดเร็ว ดังนั้นถ้าคุณไปที่ localhost / สวัสดี ตอนนี้จะพิมพ์อย่างอื่น เพื่อให้เป็นเพียงตัวอย่างรวดเร็วของวิธี คุณสามารถสร้างสองเส้นทางที่แตกต่าง ดังนั้นเพื่อให้ห่างไกลนี้ไม่เป็นประโยชน์สุด มีไม่มากทั้งที่คุณสามารถทำได้ คุณก็สามารถทำทุกอย่างที่มี มีหน้าเว็บ HTML ที่แตกต่างกัน และเมื่อคุณเข้าเยี่ยมชมโดยเฉพาะอย่างยิ่ง หน้ามันก็โหลดหน้าเว็บ ดังนั้นเรามาดูบางมากขึ้น สิ่งที่มีประโยชน์ที่คุณสามารถทำได้ ดังนั้นสิ่งหนึ่งที่คุณอาจมี สังเกตเห็นในตัวอย่างที่ผมดึง ขึ้นเป็นที่ฉันได้ app.run (= การแก้ปัญหาที่แท้จริง) และเพื่อสิ่งนี้ อาร์กิวเมนต์แก้ปัญหาไม่เป็น ที่ว่าเมื่อคุณเรียกใช้เว็บเซิร์ฟเวอร์ของคุณ เมื่อคุณอยู่ในใบสมัครของคุณ ถ้าคุณเปลี่ยนไฟล์ก็จะ โดยอัตโนมัติโหลดเซิร์ฟเวอร์ และเพื่อให้คุณไม่จริงต้อง รีสตาร์ทงูใหญ่ซึ่งจะเป็นประโยชน์สุด ฉันสามารถแสดงให้เห็นว่า ผมขอดึงรหัสของฉัน ที่มีการพิมพ์ผิดในนั้น และแกล้งพิมพ์ผิดที่ใส่มี จงใจเพื่อวัตถุประสงค์ในการให้คำแนะนำ ดังนั้นขอเพิ่มกลับนี้ ดังนั้นตอนนี้ก็พูดว่า Hello World เราจะช่วยมัน และถ้าเราดึงกลับขึ้นไป สถานีที่คุณจะ บอกว่ามันเริ่มต้นใหม่ เพราะตรวจพบการเปลี่ยนแปลง และดังนั้นตอนนี้เมื่อเราโหลดหน้านี้ มันจะพิมพ์ออกมาสิ่งที่ถูกต้อง ดังนั้นการแก้ปัญหาเป็นซุปเปอร์ที่มีประโยชน์สำหรับการที่ นอกจากนี้ถ้าคุณมี การเรียงลำดับของความผิดพลาดดังนั้น ให้ฉันให้ความผิดพลาดของโปรแกรมนี้ โดยมีมันไม่กลับสตริง ดังนั้นขอเพียงแค่มีมัน กลับไม่มีเหตุผลบางอย่าง และแล้วเมื่อฉันเยี่ยมชม หน้ามันก็จะผิดพลาด แต่เซิร์ฟเวอร์ไม่เพียง แต่ความผิดพลาดมัน จริงจะช่วยให้คุณกลับมามีประโยชน์สุด ร่องรอยของทุกอย่างที่ผิดพลาดไป และสิ่งที่ดีจริงๆก็คือว่า ในขั้นตอนใด ๆ ในการตรวจสอบย้อนกลับนี้ คุณสามารถเปิดการโต้ตอบ เปลือกที่นี่และการเรียงลำดับของสิ่งที่พิมพ์ออกมา ตัวแปรที่คุณต้องการที่จะดูที่ และเพื่อให้การแก้จุดบกพร่องที่เป็นจริง มีประโยชน์สำหรับการหา สิ่งที่เกิดขึ้นกับคุณ เซิร์ฟเวอร์มากกว่าเพียงแค่เห็น บางสิ่งบางอย่างใน PHP เช่น 500 ภายใน ผิดพลาดของเซิร์ฟเวอร์ซึ่งจะไม่ได้ผลสุด สิ่งหนึ่งที่ต้องระวังคือ ว่าถ้าคุณใส่ app ออนไลน์ของคุณ ดังนั้นจึงเป็นเรื่องที่มองเห็นให้กับประชาชนคุณ ไม่ต้องการที่จะออกจากโหมดการแก้ปัญหาที่ เพราะคนที่สามารถจริง ใช้คอนโซลที่ฉัน แสดงให้เห็นว่าคุณสามารถรันโค้ด ดังนั้นพวกเขาจึงสามารถพิมพ์ออกมาอย่างใด รหัสลับที่คุณมีในที่นั่น พวกเขาสามารถมองที่ตรง วิธีการที่เว็บไซต์ของคุณเป็นที่ทำงาน ดังนั้นจึงเป็นประโยชน์จริงๆ สำหรับการทดสอบ แต่เสมอ ให้แน่ใจว่าจะเอามันออกไปก่อน คุณเผยแพร่อะไรออนไลน์ ดังนั้นเมื่อคุณกำลังใช้บางสิ่งบางอย่าง เช่น PHP มีความคิดนี้ ที่คุณสามารถผ่าน ข้อมูลระหว่างหน้าเว็บ โดยการใส่ข้อมูลที่เป็นจริง ใน URL ซึ่งเป็น GET คำขอที่ แต่ในขวดคุณสามารถจริง ทำบางสิ่งบางประเภทเช่นนั้น โดยมีเส้นทางที่มี ตัวแปรที่เป็นส่วนหนึ่งของมัน ดังนั้นถ้าคุณดูที่นี้ ตัวอย่างเช่นบนหน้าจอที่นี่ เรามีเส้นทางที่เป็น ('/ ทักทาย /') และถ้าคุณเข้าเยี่ยมชม / ทักทาย / บางสิ่งบางอย่างบางสิ่งบางอย่าง เป็นไปได้รับจริงเต็ม ลงในตัวแปรชื่อ และแจ้งให้ทราบว่าการทำงาน ที่มาพร้อมกับเส้นทางที่ มีการใช้ในพารามิเตอร์ ชื่อเพื่อที่ว่ามันจะจริง ได้รับการผ่านเข้าสู่ฟังก์ชั่น และจากนั้นเมื่อคุณ ภายในของฟังก์ชั่นที่ คุณสามารถรักษาที่ชอบ ตัวแปรหลามปกติ และเป็นอย่างนั้นก็จะ พิมพ์ออกมาสวัสดีและมัน จะกรอกชื่อโดยใช้ บางรูปแบบสตริง ดังนั้นเพื่อเพิ่มส่วนตัวแปรที่จะกำหนดเส้นทาง, คุณใช้วงเล็บมุมการทำเครื่องหมาย และเลือกที่คุณสามารถใช้ สิ่งที่เรียกว่าแปลง ดังนั้นถ้าคุณใส่นี้ คำอธิบายประกอบกับลำไส้ใหญ่ คุณสามารถระบุว่ามันเป็น int หรือลอยหรือเส้นทาง โดยอัตโนมัติและจะแปลงที่ นอกจากนี้คุณยังสามารถทำแปลง ฟังก์ชั่นภายในหลาม โดยใช้เพียงแค่โยน แต่บางครั้งถ้า คุณต้องการเพื่อให้แน่ใจว่ามันเป็น int ที่ คุณสามารถใส่ว่า แปลงการปกครองในการมี ดังนั้นขอดึงตัวอย่าง ของกฎตัวแปรบาง ดังนั้นที่นี่มีพื้นฐานเดียวกัน โครงสร้างที่มีการนำเข้าจากขวด กระติกน้ำ, app = ขวด (_NAME_) และจากนั้นจะทำงานในตอนท้าย เรามีทั้งสองแตกต่างกัน เส้นทางตัวแปรที่นี่ และคนแรกคือ คนที่ฉันพบ ในสไลด์ซึ่งเป็นที่ ก็ใช้เวลาเพียงในนามสตริง และมันจะพิมพ์ออกมาสวัสดีชื่อ แล้วที่สอง หนึ่งใช้การแปลง ดังนั้นนี่จะแปลงเป็น ไปยัง int แล้วสองครั้ง int ที่ และพิมพ์ออกมา และเราไม่ได้ทำเรียงลำดับใด ๆ ของการแปลงที่อยู่ภายใน เพราะขวดดูแลว่า จึงขอได้ทำงานนี้ เมื่อคุณมีขวด การทำงานของโปรแกรมประยุกต์ คุณสามารถควบคุม-C ออกมาจากมัน ที่จะหยุดการทำงานของเซิร์ฟเวอร์ แล้วฉันจะทำงานตัวแปร ถ้าอย่างนั้นเราไปที่ localhost / ทักทาย / เอสราและ หวังว่านี้จะกล่าวทักทายกับผม ดังนั้นมันต้องใช้เวลาในชื่อของฉันในตัวแปร เส้นทางและมันเต็มไปไว้ในที่นี่ ดังนั้นผมจึงยังจะแสดงให้เห็นได้อย่างรวดเร็ว ตัวอย่างของการเสแสร้ง ดังนั้นถ้าคุณไป / คู่ / 3 มันจะพิมพ์ออกมา 6 ดังนั้นนี่เอาดูแลของ แปลงสำหรับเรา ดังนั้นคุณสามารถทำมันได้ด้วย ลอยและสิ่งที่พิเศษ ถ้าคุณจำเป็นต้องระบุสิ่งที่ต้องการ เส้นทางที่ช่วยให้มันยอมรับทับ, แต่ที่ไม่ควรมักจะเป็นปัญหา จนถึงขณะนี้เรายังมี เพิ่งได้รับกลับมา สตริงซึ่งไม่ได้เป็นที่น่าสนใจมาก เราจริงจะกลับมา สตริง HTM​​L ที่แท้จริง ดังนั้นในรหัสที่เราสามารถแทรกบางสิ่งบางอย่าง เช่นขแท็กที่จะทำให้มันเป็นตัวหนา แต่ส่วนใหญ่เวลาที่คุณ ไม่ต้องการจริง จะต้องมีการเขียนโค้ด HTML ในรหัสหลามของคุณ จะได้รับยุ่งจริงๆ และก็ไม่ได้เป็นเวลาที่ดี กระติกน้ำช่วยให้เราสามารถที่จะแยกออก HTML เป็นสิ่งที่เรียกว่าแม่แบบที่ และดังนั้นถ้าคุณกำลังคิด ในแง่ของรูปแบบ MVC ที่คุณคุ้นเคยกับ หวังว่าจากการทำงาน กับ CS50 การเงินนิด ๆ หน่อย ๆ คุณสามารถคิดของไฟล์หลาม ในฐานะที่เป็นมากขึ้นของการควบคุมที่ พวกเขาจะมีปฏิสัมพันธ์กับสิ่งที่ รูปแบบข้อมูลที่คุณอาจมี และแล้วพวกเขาจะโทรออกไปชม และผ่านข้อมูลไปยังที่ ในการกรอกข้อมูล ใน HTML ที่ต้องการ และสิ่งที่เราเรียกผู้ที่เข้าชม เป็นแม่แบบในชั้นเรียน ดังนั้นขวดใช้งูหลามอีก โมดูลที่มันจะโดยอัตโนมัติ ติดตั้งเมื่อคุณติดตั้ง PIP กระติกน้ำเรียกว่าจินซึ่ง ช่วยให้คุณสามารถเพิ่มเหล่านี้ คำอธิบายประกอบกับ HTML ที่คุณเห็นบนหน้าจอที่ช่วยให้ ที่คุณใส่ในสิ่งที่ต้องการเงื่อนไข, และลูปเข้ามาในรูปแบบ HTML ดังนั้นมันก็ดูนิด ๆ หน่อย ๆ เช่นวิธีการที่คุณ อาจใช้ PHP ภายในไฟล์ HTML, แต่นี้เป็นเพียงเมื่อขวด เซิร์ฟเวอร์ให้บริการขึ้นไฟล์ HTML, มันจะทำงานเครื่องยนต์แม่แบบนี้และ แยกผ่านสิ่งนี้และปฏิบัติตาม ดังนั้นขวดมีฟังก์ชั่ render_template ที่คุณสามารถดูที่ด้านล่างนี่ ดังนั้นเมื่อคุณเยี่ยมชมหน้านี้ก็ จะทำให้แม่แบบ hello.html นี้ แล้วกรอกข้อมูลในเพจ HTML นี้ ดังนั้นขอเพียงแค่เรียกใช้จริง อย่างรวดเร็วและดูสิ่งที่ดูเหมือนว่า แล้วฉันจะไปผ่าน นิด ๆ หน่อย ๆ ในรายละเอียดเพิ่มเติม ดังนั้นแม่แบบของคุณจะ ที่จะไปอยู่ในโฟลเดอร์แม่แบบ โดยอัตโนมัติจะมองภายใน แม่แบบโฟลเดอร์แม่แบบที่ ดังนั้นขอเปิดขึ้นนี้ ดังนั้นผมจะใช้ตัวอย่าง Templating ดังนั้นถ้าผมไป / ทักทาย / เอซร่า มันมีนี้น่ากลัว แท็กปะรำน่ารังเกียจที่ฉันใส่ใน ดีมากแบบไดนามิกมาก ฉันเป็นแฟนใหญ่ แต่สิ่งที่เกิดขึ้นถ้า ฉันเพียงแค่ไปที่ / ล่ะ? ดังนั้นมันก็บอกว่า Hello World ผมไม่ได้ส่งชื่อและ มันเต็มไปโดยอัตโนมัติ ดังนั้นเรามาดูวิธีการที่จะทำอย่างนั้นและวิธีการ เราสามารถกำจัดปะรำว่าบางที ดังนั้นที่นี่นี่คือการจัดเรียงของ ตัวอย่างที่น่าสนใจของ ถ้าคุณมีความคุ้นเคยกับวิธีการที่สวิทช์ งบทำงานในภาษา พูดแบบนี้คือการจัดเรียงของชอบ การจัดเรียงของฤดูใบไม้ร่วงที่ผ่านนั้น ที่คุณจริงที่แนบมาสอง เส้นทางที่แตกต่างกันเพื่อฟังก์ชั่นเดียวกัน ดังนั้นเราจึงแนบ / สวัสดีเส้นทางและ / การทักทาย / เส้นทางชื่อสวัสดี และเราระบุ using-- หลามช่วยให้คุณ ระบุเริ่มต้น arguments-- ฟังก์ชั่น ดังนั้นหากมีชื่อไม่ดังนั้น ถ้าเราไปเพียงแค่ / สวัสดี โดยอัตโนมัติจะกรอง กับชื่อเท่ากับไม่มี ดังนั้นแล้วเราทำให้ แม่แบบที่มีชื่อชื่อ = จึงจะผ่านในชื่อพารามิเตอร์ เท่ากับชื่อพารามิเตอร์ฟังก์ชั่นนี้ ลงในแม่แบบ ที่ยังคงไม่ได้อธิบายว่าเ​​ป็น การตัดสินใจว่าจะพิมพ์โลกสวัสดี หรือพิมพ์ชื่อของฉัน ดังนั้นเรามาดูจริง ลงในแม่แบบของตัวเอง และดูว่าที่มาจาก ดังนั้นภายในแม่แบบนี้เรา จริงมีบางตรรกะเงื่อนไข ซึ่งบางคนจะ เถียงคุณจริง ไม่ควรมีจำนวนมากของเงื่อนไข ตรรกะภายในแม่แบบของคุณเอง มันควรจะเป็นมากขึ้นภายใน ควบคุม แต่สำหรับตัวอย่างนี้ มันเป็นสิ่งที่สวยขนาดเล็ก ดังนั้นที่นี่เราจะตรวจสอบถ้าชื่อดังนั้น ถ้าชื่อไม่เท่ากับไม่มี ถ้าชื่อที่เป็นจริง ผ่านแล้วเราจะ พูดสวัสดีชื่อกับ ส่วนหัวและกระโจม, ทั้งหมดนี้ HTML ปกติมิฉะนั้นเราจะ พิมพ์ออกมาสวัสดีโลกเพียงตามปกติ ดังนั้นสิ่งที่สองที่จะสังเกตเห็นที่นี่ เกี่ยวกับวิธีการรูปแบบที่คุณแม่แบบที่ คือว่าสิ่งเหล่านี้ งบเงื่อนไข ประเภทเช่นวิธีการที่เรา PHP เมื่อ คุณต้องการแทรก PHP บาง คุณใช้น้อยกว่าคำถาม เครื่องหมายก็คล้ายการจัดเรียงของที่นี่ กับ {%. ดังนั้นที่นี่เรามีรหัสตามเงื่อนไขของเรา และจากนั้นเมื่อคุณจริงต้องการ บางสิ่งบางอย่างแท้จริงในการประเมินและการพิมพ์ ออกไปยังหน้าจอคุณ ใช้เครื่องหมายวงเล็บสอง ดังนั้นนี่คือวงเล็บคู่ และจากนั้นเราระบุชื่อ ภายในนั้นก็จะมีการประเมิน กับชื่อตัวแปรที่ ถูกส่งผ่านมาจาก ทำให้ฟังก์ชั่นแม่แบบ มากกว่าเพียงแค่การพิมพ์ ออกมาถ้าเราได้กำจัดเหล่านี้ มันก็จะพิมพ์คำว่า "ชื่อ". ดังนั้นที่บางสิ่งบางอย่างที่ต้องระวัง ดังนั้นสิ่งที่จะต้องอีก แจ้งให้ทราบก็คือว่าเมื่อเรา ต้องการใช้ ฟังก์ชั่น render_template, เราจริงต้องนำเข้า อย่างชัดเจนจากขวด และนี่คือตัวอย่างของ ต้นแบบของขวดที่ ที่คุณไม่ต้องนำเข้า สิ่งที่คุณไม่จำเป็นต้อง คุณก็สามารถนำมาใน ฟังก์ชั่นที่คุณจริง จะต้องซึ่งบางครั้ง ที่ดีเพื่อให้คุณทำไม่ได้ ต้องมีฟังก์ชั่นเหล่านี้ทั้งหมด นั่งรอบว่าคุณไม่ได้ใช้ แต่ยังถ้าคุณลืมว่าคุณ จำเป็นต้องนำเข้า render_template, คุณอาจจะได้รับการเตือน ที่จะช่วยให้คุณทราบเกี่ยวกับว่า ดังนั้นที่เป็นแม่แบบ ดังนั้นเราได้แสดงให้เห็นถึงวิธีการ ทำให้หน้าเว็บง่าย และเพิ่มนิด ๆ หน่อย ๆ ตรรกะมากขึ้นในการ มันในแง่ของเส้นทางตัวแปร ซึ่งช่วยให้คุณทำสิ่งที่แตกต่างกันขึ้นอยู่กับ สิ่งที่ URL ที่คุณไปและจากนั้นให้ HTML ที่ความรู้สึกนิด ๆ หน่อย ๆ ใน แง่ของวิธีที่คุณต้องการที่จะทำให้สิ่งที่ คุณไม่จำเป็นต้องที่จะนำทุก HTML ของคุณในหลามของคุณ แต่สำหรับสวยมาก โปรแกรมประยุกต์บนเว็บทุก คุณจะต้องการอะไรบางอย่าง ของรูปแบบข้อมูลที่เกี่ยวข้องกับมัน และเพื่อให้ประเพณีนี้จะ เป็นสิ่งที่ชอบฐานข้อมูล SQL และคุณก็สามารถโต้ตอบ โดยตรงกับ SQL งูใหญ่มีผมคิดว่ามันเรียกว่า SQLite 3 คุณก็สามารถนำเข้าข้อมูล SQLite 3 ดำเนินการสอบถาม SQL โดยตรง แต่ฉันไม่ทราบเกี่ยวกับคุณ แต่ผมไม่ชอบเพียง เขียนออกแบบสอบถาม SQL มันมีแนวโน้มที่จะได้รับจริงๆ ยาวและซับซ้อน ดังนั้นสิ่งที่ ผมชอบที่จะใช้เป็นสิ่งที่ ที่รู้จักกันเป็นออมซึ่งเป็น การทำแผนที่วัตถุสัมพันธ์ และจุดที่ การทำแผนที่วัตถุสัมพันธ์ คือว่ามีสองที่แตกต่างกัน วิธีที่คุณสามารถคิดเกี่ยวกับฐานข้อมูล ดังนั้นตัวอย่างที่ ศาสตราจารย์ลันมักจะ ใช้ในชั้นเรียนเป็นตาราง Excel ที่ คุณมีแถวและคอลัมน์เหล่านี้เหล่านี้ และที่มีประโยชน์จริงๆสำหรับ วิธีการที่จะเป็นตัวแทนใน SQL และวิธีที่คุณโต้ตอบกับมัน แต่ วิธีการที่จะเป็นจริงอีก ประโยชน์ที่จะคิดเกี่ยวกับมันบางครั้ง คือในแง่ของการเรียนและวัตถุ ดังนั้นแทนที่จะคิด ของแต่ละตารางมี แถวที่มีบางนี้ ข้อมูลที่คุณสามารถจริง คิดว่ามันเป็น แต่ละตารางเป็นชั้นเรียน แล้วทุกกรณีของ ระดับมีคุณสมบัติบางอย่าง ดังนั้นในตัวอย่างนี้กรณีของ ชั้นเป็นแถวในตาราง แล้วแต่ละสถานที่ให้บริการจะ เป็นคอลัมน์ในตาราง ดังนั้นออมที่ผมชอบ ที่จะใช้เรียกว่าแคระ มันมีขนาดเล็กจริงๆประเภทเช่นขวด ผมคิดว่าพวกเขาไปร่วมกัน แต่มีจำนวนมากของ ORMs อื่น ๆ ที่คุณสามารถใช้ หนึ่งที่เป็นที่นิยมมากขึ้น ที่รู้จักกันเป็น SQLAlchem​​y, และผมจำไม่ได้ว่าทำไมฉันเดิม เลือกแคระมากกว่า SQLAlchem​​y, หรือฉันจะบอกคุณว่าทำไมฉัน คิดว่ามันเป็นหนึ่งในที่ดีที่สุด แต่เรากำลังจะใช้นี้ เพราะฉันรู้ว่าวิธีการใช้งาน ดังนั้นหนึ่งคำถามคือทำไม คุณควรรำคาญใช้ออม, แทนเพียงโดยตรง การเขียนคำสั่ง SQL? และผมคิดว่ากรณีที่ดีที่สุด คือการที่คุณทำไม่ได้จริง ต้องเขียนคำสั่ง SQL มันง่ายมากที่ผมจะแสดงให้คุณเพื่อ ทำสิ่งที่ต้องการเลือกแทรก การลบโดยเฉพาะอย่างยิ่งการสร้างตาราง มันง่ายมากที่จะ เขียนโครงสร้างชั้นเรียน กว่าก็คือการสร้างโครงสร้าง ตารางคำสั่ง แต่สิ่งหนึ่งที่ ที่จะตระหนักถึงก็คือว่า ออมจะพยายามที่ดีที่สุด จะคิดออกว่ามากที่สุด แบบสอบถามที่มีประสิทธิภาพ SQL จะเป็น แต่บางครั้งที่จะได้รับมันผิด และโดยเฉพาะอย่างยิ่งถ้าคุณอยู่ การทำงานร่วมกับฐานข้อมูลขนาดใหญ่ คุณสามารถสังเกตเห็นว่าแบบสอบถาม ที่ควรจะทำงานได้อย่างรวดเร็ว, เป็นจริงใช้เวลานาน และถ้าคุณมองภายใต้ประทุนที่วิธีการ ออมที่มีการตีความที่เป็น SQL, มันอาจจะทำอะไรบางอย่าง ไร้สาระจริงๆ เพียงเพราะการจัดเรียงของ ชี้ความตั้งใจของคุณที่ไม่ถูกต้อง และมีหลายครั้งที่ ฉันเคยที่จะแทนที่มันและเพียง ดำเนินการแบบสอบถาม SQL ของตัวเองเพียง เพราะมันถูกแยกในทางที่แปลก จึงมีบางอย่าง ค่าใช้จ่ายเพียงในทาง ว่ามันรวบรวมของคุณ งบลงไปใน SQL ดังนั้นเราลองมาดูสุดได้อย่างรวดเร็วที่ ตัวอย่างง่ายๆของรูปแบบข้อมูล ที่คุณอาจใช้ ดังนั้นนี้เป็นรหัส Python, และอื่น ๆ สิ่งแรกที่คุณต้องการจะทำคือจาก นำเข้าแคระ * ดังนั้นไม่เหมือนขวดที่คุณมี ทั้งหมดเหล่านี้แต่ละโมดูล, และคุณต้องการที่จะนำเข้าขวดและ เขียนแม่แบบและอื่น ๆ ว่าเราจะได้เห็นต่อไปจากคนแคระ, คุณก็สามารถนำเข้าทุกอย่าง เพราะมันเป็นห้องสมุดขนาดเล็กสวย ดังนั้นสิ่งแรกที่คุณต้องการจะทำคือ จริงสร้างวัตถุฐานข้อมูลนี้ ดังนั้นคุณมีฐานข้อมูล = SqliteDatabase, แล้วชื่อของฐานข้อมูลของคุณ และนี่จะเป็นจริง สร้างวัตถุฐานข้อมูล ที่คุณสามารถโต้ตอบกับกับคนแคระ และแล้วเรามีที่เกิดขึ้นจริง รูปแบบที่เราต้องการที่จะสร้าง ดังนั้นตารางที่เราต้องการที่จะสร้าง ดังนั้นภายในแคระแต่ละระดับมี โต๊ะของตัวเองที่อยู่ในฐานข้อมูลของคุณ ดังนั้นทุกคนในชั้นเรียน สืบทอดจากรุ่นฐาน และรูปแบบของเงินทุน M เป็น บางสิ่งบางอย่างที่กำหนดไว้ในแคระ ดังนั้นทุกรูปแบบของคุณควร ได้รับมรดกเป็น superclass สูงสุดของพวกเขา พวกเขาควรจะได้รับมรดกจาก รูปแบบ แต่สิ่งที่เย็นจริงๆ เป็นจริงที่คุณสามารถมีของคุณ รุ่นสืบทอดจากกัน และจำนวนมากของเวลาของคุณ รูปแบบข้อมูลไม่จำเป็นต้อง ทำให้ลำดับชั้นมรดกที่ดี แต่ ครั้งที่พวกเขาทำมันเป็นเรื่องดีจริงๆ เพราะคุณมีรูปแบบ โดยธรรมชาติจากกัน ดังนั้นเรากำหนดชั้นนี้ 'นักเรียน' ซึ่งสืบทอดรูปแบบ และมีคุณสมบัติที่สาม แต่ก็มีประชาชนซึ่งเป็น PrimaryKeyField ซึ่ง เป็นสิ่งที่มีให้ โดยแคระชื่อเป็น CharField, และเกรดเป็น IntegerField ดังนั้นนี่อาจจะหรืออาจจะไม่ได้ วิธี CS50 จริงเก็บ เกรดของนักเรียน มันไม่ได้เป็น แต่นี้เป็นวิธีที่ฉันจะทำ และจากนั้นก็มีภายใน ชั้นนี้และนี้ เป็นสิ่งที่คุณสามารถทำอะไรกับ งูหลามคุณสามารถมีชั้นเรียนที่ซ้อนกัน และนี่คือสิ่งที่ ที่จำเป็นโดยแคระ ดังนั้น Meta ระดับนี้คุณมี เพื่อระบุว่าฐานข้อมูลเป็น เท่ากับวัตถุ ที่เราสร้างขึ้นดังกล่าวข้างต้น และนี่กล่าวว่าสิ่งที่ไฟล์ตารางนี้ จริงจะได้รับการบรรจุอยู่ใน ดังนั้นนี่คือสิ่งที่คุณมี ที่จะทำภายในทั้งหมดของโมเดลของคุณ คุณเพียงแค่ต้องระบุ ภายในชั้นเรียน Meta นี้ ฐานข้อมูลที่เท่ากับ db ดังนั้นสิ่งที่ฉันมักจะทำถ้ามี พวงของรูปแบบที่แตกต่างกัน คือว่าผมมีฐาน รุ่นที่ผมมักจะ เพียงแค่เรียกว่า "รูปแบบฐาน" ที่มีระดับเมตาดาต้าที่ และจะกำหนดฐานข้อมูลเท่ากับ db และแล้วสิ่งที่ตามมาของรูปแบบของฉัน จะได้รับมรดกจากระดับฐานที่ แล้วฉันจะได้ไม่ต้องกังวล เกี่ยวกับการตั้งชั้น Meta ดังนั้นเมื่อได้รับจริงนี้ รวบรวมลงในคำสั่ง SQL, ดูเหมือนว่าสิ่งที่น่ารังเกียจนี้ลง ที่นี่ "สร้างตารางจำนวนเต็มนักเรียนประจำ "สิ่งที่ และผมคิดว่ามันเป็นเวลาที่สั้นกว่า นี้แบบสอบถาม SQL ที่นี่ แต่ถ้าคุณมองไปที่ชั้นนี้ที่นี่ คุณจะเห็นว่าสิ่งที่เกิดขึ้น คุณสามารถมองเห็นสิ่งแปลก ๆ ของเขตข้อมูล มีสิ่งที่พวกเขากำลังจะเรียกว่า ดังนั้นผมคิดว่า กำลังมองหาที่รหัสงูใหญ่นี้ เป็นจำนวนมากที่สามารถอ่านได้มากกว่า พยายามที่จะเขียนแบบสอบถาม SQL นี้ ดังนั้นเพื่อที่จะเป็นจริง ใช้ฐานข้อมูล เรามีการเชื่อมต่อกับภายในหลาม ดังนั้นฉันมักจะเขียนฟังก์ชั่นที่เรียกว่า initialize_db ที่ไม่สองสิ่ง มันต้องใช้เวลาในฐานข้อมูล ฐานข้อมูลวัตถุและมัน เชื่อมต่อกับมันที่เพิ่งเปิด ส่วนขึ้นไปยังฐานข้อมูล หากคุณเพียงแค่ทำงานแม้ว่า เว็บไซต์บนเครื่องของคุณ มันไม่ได้เป็นเรื่องใหญ่สุดที่จะต้องกังวล เกี่ยวกับการเชื่อมต่อและตัดการเชื่อมต่อ, แต่ถ้าคุณกำลังทำงานอยู่ บนเว็บไซต์ที่คุณ ต้องการที่จะให้แน่ใจว่าเมื่อใดก็ตามที่ผู้ใช้ เชื่อมต่อกับมันเมื่อพวกเขาปิด เว็บไซต์ที่พวกเขาตัดการเชื่อมต่อเพื่อให้คุณ ไม่ได้มีกลุ่มคนที่เชื่อมต่อ ฐานข้อมูลของคุณทั้งหมดในครั้งเดียว และจากนั้นเมื่อคุณ เชื่อมต่อกับฐานข้อมูล คุณต้องการที่จะเรียก db.create_tables, และรายการรูปแบบสิ่งที่คุณต้องการ ในการสร้างตาราง ดังนั้นที่นี่ฉันเพียงแค่ต้องการที่จะ สร้างมันขึ้นมาสำหรับนักเรียนที่นี้ และแล้วสิ่งที่สำคัญคือการ ระบุปลอดภัย = True เวลามากที่สุด ดังนั้นสิ่งที่คำสั่งนี้ จะทำก็คือว่ามัน สร้างตารางสำหรับ รูปแบบของนักเรียน แต่เพียง ถ้าตารางที่มีไม่ได้ ถูกสร้างขึ้นแล้ว นั่นคือสิ่งที่ระบุปลอดภัย ดังนั้นมันจะไม่เขียนทับ ตารางที่มีอยู่ของคุณ มันจะสร้างใหม่ ตารางถ้ามีไม่ได้เป็นหนึ่งมี ดังนั้นคุณก็สามารถสร้าง ตารางที่ครั้งหนึ่งเคยใช้ SQL แล้วต้องนั่งฐานข้อมูลนั้น ที่นั่นแล้วเชื่อมต่อกับแต่ละครั้ง แต่ก็มักจะมีความสุขเพียงเพื่อ ใส่ในโทร create_tables นี้ เพื่อที่ว่าถ้าคุณเคยลบของคุณ ฐานข้อมูลเมื่อคุณเรียกใช้เว็บของคุณ การตรวจสอบอีกครั้งก็จะสร้างมัน ดังนั้นเพียงแค่ให้แน่ใจว่าปลอดภัย มีการระบุที่จะเป็นจริง หรือคุณจะพบข้อมูลของคุณเพียง ได้รับ clobbered ทุกครั้ง และจากนั้นคุณก็สามารถโทร initialize_db ที่จะสร้าง การเชื่อมต่อและสร้าง ตารางในกรณีที่จำเป็น ดังนั้นสิ่งที่พบมากที่สุด ที่คุณจะต้องการที่จะทำ หรือหนึ่งในสิ่งที่พบมากที่สุด คือการใส่สิ่งที่จริง ลงในฐานข้อมูลของคุณ ดังนั้นแทนที่จะต้อง ที่จะเขียนแทรกเข้าไป คำสั่งที่มีทั้งหมดของ ค่าที่กำหนด คุณจริงสามารถโทร ฟังก์ชั่นในชั้นเรียนของนักเรียน ดังนั้นเมื่อคุณสร้างการเรียน ที่สืบทอดจากรุ่น มันมีวิธีการสร้างนี้ ดังนั้นคุณจะทำระดับ name.create, และคุณระบุพารามิเตอร์ ที่คุณต้องการที่จะผ่านใน ดังนั้นถ้าฉันต้องการเพิ่มนักเรียนบางคน ตัวอย่างหนังสือชั้นของเรา CS50, ฉันจะใส่ในดาวิดที่มี ชั้นประถมศึกษาปีที่ดีมากเขามี 95 และตัวผมเองที่ไม่ได้ทำ ให้ดีใน CS50 ฉันมี 50 ดังนั้นสิ่งที่ดีเกี่ยวกับ สิ่งนี้จะสร้างฟังก์ชั่น ก็คือว่ามันจะส่งกลับเช่นหรือ แถวที่จะสร้างขึ้นภายในตาราง และอื่น ๆ แล้วคุณเก็บที่ใน ตัวแปรและการทำงานกับมันต่อมา คุณสามารถเปลี่ยนรอบที่ ฉันจะแสดงตัวอย่างของ ขอให้สังเกตว่าฉันไม่ได้ ต้องระบุ ID ที่ เพราะเนื่องจากเป็น PrimaryKeyField ก็จะทำงานโดยอัตโนมัติ เพิ่มขึ้นได้ถ้าคุณไม่ได้ระบุว่า และในความเป็นจริงคุณอาจ ไม่ควรระบุว่า เพราะคุณอาจจะไม่ได้ตั้งใจ บังคับ ID ของคนอื่น และคุณต้องการที่จะทำให้ ตรวจสอบให้แน่ใจว่ามันเป็นที่ไม่ซ้ำกัน ดังนั้นในความเป็นจริงมากที่สุด สิ่งที่พบที่คุณต้องการจะทำ อาจจะเลือกออก ของฐานข้อมูลครั้งเดียวคุณ มีข้อมูลจำนวนมากในการมี ดังนั้นถ้าคุณต้องการที่จะได้รับทุกอย่าง เพื่อให้เทียบเท่ากับการเลือกดาว จากนักเรียนคำสั่งมัน ก็จะ student.select และนั่นจะทำให้คุณกลับอาร์เรย์ ที่มีทั้งหมดของนักเรียนวัตถุในนั้น ที่คุณย้ำกว่าคุณต้องการ คุณจะได้รับสิ่งที่ออกมาจากมัน และส่วนใหญ่ของเวลาที่คุณ ไม่เพียงแค่ต้องการที่จะทำเลือก คุณจริงต้องการระบุบางสิ่งบางอย่าง และเพื่อให้คุณสามารถห่วงโซ่ เหล่านี้เข้าด้วยกันเรียกฟังก์ชัน เช่นวิธีการที่คุณจะห่วงโซ่ ร่วมกันงบใน SQL เพื่อให้คุณสามารถทำ student.select (). ที่ ในตัวอย่างนี้ และจากนั้นคุณสามารถ ระบุเงื่อนไข เพียงแค่ใช้งูหลามปกติ Booleans ในการตรวจสอบสิ่งที่ ดังนั้นในกรณีนี้คุณต้องการ จำกัด สิ่งที่คุณกำลังเลือกที่จะ ที่ student.grade มีค่าเท่ากับ 50, และ student.name เท่ากับเอซร่า เพื่อที่เพิ่งจะได้รับฉันออกมาจากมัน และสังเกตเห็นใครจริงๆ สิ่งที่ลึกซึ้งที่นี่ก็คือ ว่าถ้าคุณต้องการระบุ และ / หรือหรือ / หรือ ในหลาม, คุณตามปกติจะใช้ ผมคิดว่าคำว่า "และ" จริง แต่ที่นี่คุณใช้เครื่องหมายเดียว ซึ่งโดยปกติผู้ประกอบการค่าที่เหมาะสม แต่ในกรณีนี้เป็นพิเศษ เพียงวิธีแคระไม่มัน คุณใช้เพียงครั้งเดียว เครื่องหมายเพื่อระบุ "และ." นั่นคือสิ่งที่ ฉันได้รับการผสมขึ้นมาก แต่ก็ไม่ได้เกิดขึ้น ที่มากในทางปฏิบัติ และจากนั้นเมื่อคุณมีทั้งหมดของ นักเรียนออกจากฐานข้อมูล เมื่อคุณได้ทำคุณเลือก และสวมใส่หรืออะไรก็ตามที่คุณ คุณสามารถใช้ห่วง foreach, เช่นเดียวกับปกติในหลาม, กับประเภทของ iterator ใด ๆ หรือมีการจัดเรียงของอาร์เรย์ใด ๆ เพื่อให้คุณสามารถทำสำหรับ s ใน student.select (). Whe อีกครั้ง (Student.grade <75) และอื่น ๆ นี้จะ ย้ำกว่านักเรียนในตารางแต่ละ ชั้นประถมศึกษาปีที่มีน้อยกว่า 75 ซึ่ง ในกรณีนี้ยังคงเป็นเพียงฉัน และจากนั้นคุณสามารถทำสิ่งที่อยู่ภายใน ห่วงว่าเหมือนส่งอีเมล์ และบอกฉันจริง เปิดชุดปัญหาของฉัน ดังนั้นสิ่งที่คุณสามารถทำได้ ทำมันเป็นเรื่องง่าย การปรับปรุงแถวภายในตาราง ดังนั้นอย่าลืมกลับมาที่นี่ ของคุณเมื่อฉันใส่ ผมเอาค่าที่เป็น ส่งกลับโดย student.create, และผมได้รับมอบหมายให้เป็นชื่อที่เรียกว่าเอสรา ดังนั้นตอนนี้คุณสามารถเปลี่ยน ค่าภายในเช่นนั้น เช่นเดียวกับที่คุณจะ ระดับปกติในหลาม ดังนั้นคุณสามารถตั้งค่า ezra.grade = 95 และ ที่จะปรับปรุงสำเนาท้องถิ่น แต่ถ้าคุณต้องการจริง การเปลี่ยนแปลงที่กระทำกับฐานข้อมูล, คุณมีการโทร ezra.save, เพื่อให้คุณเรียกว่าวิธีการ .save ในอินสแตนซ์ ดังนั้นตอนนี้ผมมีการเปลี่ยนแปลงที่ประสบความสำเร็จ เกรดของตัวเองที่อยู่ในฐานข้อมูล ดังนั้นแล้วขอบอกว่าผมได้รับการติด ชั้นประถมศึกษาปีที่เปลี่ยนแปลงของฉันในฐานข้อมูล ศาสตราจารย์ลันอาจจะ ต้องการที่จะลบผมจากชั้นเรียน และเพื่อให้คุณสามารถโทร .delete วิธีการเช่นเพียงแค่ในสิ่งที่ ดังนั้นถ้าคุณอยากจะไป กลับเข้ามาในวงนี้ที่นี่ และจริงแทน การส่งอีเมลทั้งหมด ของนักเรียนชั้นประถมศึกษาปีที่มีน้อย มากกว่า 75 คุณต้องการที่จะลบพวกเขา ภายในวงนี้คุณสามารถ เรียกเช่น s.delete และสิ่งสุดท้ายที่คุณต้องการจะทำ คือเมื่อใดก็ตามที่คุณสร้างการเชื่อมต่อ และคุณทำกับการทำงานของคุณ คุณต้องการที่จะเรียก db.close, ฐานข้อมูลที่เป็นฐานข้อมูลที่ วัตถุที่เรามีมาก่อน และคุณต้องการเพื่อให้แน่ใจว่า ทุกอย่างที่ได้รับการปิดออกจาก เย็น. ดังนั้นตอนนี้ผมมีโปรแกรมตัวอย่าง ฉันได้เรียงลำดับของทุกอย่างที่ทำไว้ล่วงหน้าเพียง เพื่อที่จะไม่มีการเข้ารหัสใด ๆ ที่มีชีวิตอยู่ ความผิดพลาด แต่เราสามารถเดินผ่าน และดูว่าคุณจะใส่ขวด และคนแคระด้วยกัน และทำให้ app ง่าย ผมเรียกมันว่าพูดจาโผงผาง CS50 และก็ การเรียงลำดับของบล็อกแพลตฟอร์มที่เรียบง่าย ดังนั้นก่อนที่ฉันจะเรียกใช้และ แสดงสิ่งที่ดูเหมือนว่า และจากนั้นเราสามารถมองมากยิ่งขึ้นในรหัส เอาล่ะเพื่อให้เพียงทำงานนี้ เย็นฉันจะทำให้เรื่องนี้ นิด ๆ หน่อย ๆ ที่มีขนาดเล็ก มันไม่ได้สวยมากเพียงเพราะ ฉันไม่ได้ทำให้จำนวนมากของ CSS ที่ แต่สิ่งที่มันไม่เป็นก็มี ฐานข้อมูลนี้ของบล็อกโพสต์ และมันจะไปผ่านทั้งหมดของ พวกเขาและมันจะแสดงให้พวกเขา ในหน้าในลำดับล่าสุด และอื่น ๆ เหล่านี้เป็นเพียงบางส่วนที่โพสต์ ที่ฉันได้บันทึกไว้ในฐานข้อมูล ดังนั้นหากเราต้องการที่จะสร้างใหม่ โพสต์ที่เราสามารถไปเพิ่มโพสต์ใหม่ และเราสามารถใส่ชื่อของ โพสต์เพื่ออะไรบางอย่างเช่นการสัมมนา CS50 ว้าวจริงๆเพลิดเพลินกับการสัมมนา เย็น. จากนั้นคุณกดโพสต์และมันจะ นำคุณกลับไปที่หน้าบ้าน แล้วคุณจะเห็นว่า โพสต์ล่าสุดถูกเพิ่มเข้ามา และเรายังคงมีทุกคนที่มี ดังนั้นตอนนี้เรามาผ่านขั้นตอนทั้งหมดของ รหัสและดูวิธีนี้จะดำเนินการ ดังนั้นผมคิดว่าสิ่งแรกที่ขอ ดูที่เป็นจริงรูปแบบ จำนวนมากของเวลาเมื่อ คุณออกแบบบางสิ่งบางอย่าง คุณต้องการที่จะคิดเกี่ยวกับวิธีแรก คุณกำลังจะเป็นตัวแทนของข้อมูลของคุณ แล้วออกแบบสิ่งต่าง ๆ รอบนั้น เพื่อให้ทุกอย่างที่ทำให้รู้สึก และที่เป็นจริงวิธีการที่ฉัน ไม่ได้เมื่อผมทำนี้ ผมนั่งลงและคิดว่า ทำในสิ่งที่ฉันต้องการในการโพสต์ ดังนั้นที่นี่เรามีโครงสร้างเดียวกัน ที่ผมกล่าวถึงก่อนหน้านี้ ที่เราทำฐานข้อมูล = Sqldatabase (posts.db) ในความเป็นจริงคุณอาจไม่ต้องการ ยากรหัสชื่อในฐานข้อมูลของคุณ นั่นอาจจะพารามิเตอร์ ที่เก็บไว้ที่อื่นอาจจะ ในไฟล์ config แต่ใน ตัวอย่างเล็ก ๆ เช่นนี้ มันโอเคที่จะรหัสที่ยากที่ใน ดังนั้นตอนนี้เรามีระดับนี้โพสต์ ซึ่งสืบทอดมาจากรูปแบบฐาน และก็จะมีอีกครั้งที่ ID = PrimaryKeyField อันที่จริงถ้าคุณไม่ได้ระบุ ถ้าจริงผมได้กำจัดนี้ แล้วคนแคระที่เราจะดูแล โดยอัตโนมัติสร้างสนาม ID ที่ และมันจะโดยอัตโนมัติ ทำให้มันเป็น PrimaryKey ซึ่ง ผมคิดว่าเป็นสิ่งที่ดีจริงๆเพราะปกติ นั่นคือสิ่งที่คุณต้องการที่จะมี แต่ผมชอบที่จะใส่ไว้ในโดยเฉพาะ เพียงเพื่อให้ผมจำได้ว่ามันเป็นในการมี แต่ถ้าคุณไม่ได้ระบุว่า ที่จะมีขึ้นโดยอัตโนมัติ ดังนั้นแล้วฉันมีวันที่ เป็น DateTimeField และทั้งหมด สาขาที่แตกต่างเหล่านี้ถ้าคุณ ดูเอกสารแคระ, มันจะให้รายการของที่แตกต่างกัน ชนิดของเขตข้อมูลที่คุณสามารถใช้ ส่วนใหญ่ก็คล้าย กับสิ่งที่คุณจะได้เห็นใน SQL จึงมี CharField เป็น VarCharFields, กรอบข้อความ, ซึ่งนานมาก ตำราเช่นบล็อกโพสต์ ที่อาจเกิดขึ้น DateTimeFields, DoubleFields, FloatFields, ทุกสิ่งที่ต้องการที่ และคุณสามารถส่งผ่านในการขัดแย้งอื่น ๆ มันซึ่งผมไม่ได้ระบุที่นี่ กล่าวว่าสำหรับตัวอย่างเช่นคุณไม่ต้องการที่จะ ช่วยให้สองโพสต์ที่จะมีชื่อเดียวกัน คุณสามารถระบุ สิ่งที่ต้องการที่ไม่ซ้ำกัน = ทรู และนั่นเป็นเพียงพารามิเตอร์พิเศษในการ สนามว่าเมื่อมันรวบรวมมันลง ลงใน SQL ก็จะระบุ ว่ามันจะต้องมีเอกลักษณ์ นอกจากนี้คุณยังสามารถระบุสิ่งที่ต้องการ ไม่เป็นโมฆะและทุกสิ่งอื่น ๆ คุณทำตามปกติใน SQL ดังนั้นนี้เป็นวิธีที่ง่ายสวย รูปแบบที่มีวันที่ ขอให้สังเกตที่นี่ภายใน DateTimeField ที่ ระบุสิ่งที่ผมเริ่มต้นคือ ฉันที่กำหนดให้เป็น datetime.datetime.now, เพราะวิธีการที่ นี้ได้รับการประเมิน มันจริงประเมิน DateTime.Now เมื่อ จะได้รับการใส่เข้าไปในฐานข้อมูล ผมคิดว่าผมมี เพื่อตรวจสอบนี้ แต่ถ้าคุณไม่ได้ทำอะไรเช่นนี้แล้ว มันจริงจะประเมินว่าครั้งเดียว และแล้ววันที่และเวลา มักจะเป็นแบบเดียวกัน ดังนั้นเพียงแค่ถ้าคุณกำลังทำอะไรบางอย่าง กับ datetimes ให้ตรวจสอบ ว่ามันประเมินเมื่อ จริงได้รับแทรกหรืออื่น ๆ คุณอาจจะสับสน ชื่อเป็นเพียง CharField ซึ่งมี ข้อโต้แย้งมากกว่าที่คุณจะสามารถผ่าน ในการระบุว่าวิธีการระยะเวลาที่คุณ ต้องการให้เป็น แต่ที่นี่ มันไม่ได้เรื่องจริงๆ และข้อความที่เป็นไปได้ ข้อความของโพสต์ทั้งหมด และที่จะเป็น TextField เพียงเพราะคุณต้องการ ที่จะอนุญาตให้เป็นสายยาวสวย แล้วเรามี Meta นี้ รองที่เพียงแค่ ระบุว่าเราต้องการฐานข้อมูล ที่นี้จะเปิดขึ้นเป็นจริง จะเป็นวัตถุฐานข้อมูลที่เรามีที่นี่ และสิ่งสุดท้ายที่เรามี นี่เป็นเพียงฟังก์ชั่นนี้ ที่เรากำลังจะไป ใช้จาก app หลักของเรา ในการเริ่มต้นฐานข้อมูลเพื่อเชื่อมต่อกับ และจากนั้นในการสร้างตารางโพสต์ ตอนนี้ให้ดูที่ app หลักของตัวเอง ดังนั้นหนึ่งนี้ค่อนข้าง อีกนานกว่าคนที่ ที่เราได้เห็นมาก่อน แต่หวังว่าไม่เลวร้ายเกินไป ดังนั้นให้ฉันขยายออกไปนี้ เอาล่ะ ดังนั้นสังเกตและด้านบนที่ผมนำเข้า ทั้งกลุ่มของสิ่งอื่น ๆ จากขวดที่เรายังไม่ได้ ก่อนที่จะเห็นจริงๆ และหวังว่าเราสามารถไปถึง แต่ละคนเหล่านี้โดยหนึ่ง และพูดคุยเล็ก ๆ น้อย ๆ เพิ่มเติมเกี่ยวกับ พวกเขาเรียงตามตัวอย่าง ดังนั้นเรามีขวดที่ และ render_template ที่ ที่เราเคยเห็นมาก่อน วัตถุคำขอนี้ ซึ่งจะเกิดขึ้นเมื่อเราดูที่วิธีการ รูปแบบที่ผมแสดงให้เห็นจริง งาน เปลี่ยนเส้นทางซึ่งช่วยให้คุณเปลี่ยนเส้นทาง กลับมาจากการสร้างโพสต์ใหม่ กลับไปที่หน้าแรกของเดิมแล้ว URL ซึ่งเป็นสิ่งที่ช่วยให้คุณ คิดออกว่าใน เว็บไซต์หน้าโดยเฉพาะอย่างยิ่งคือ ดังนั้นแล้วต่อไป สิ่งที่ผมทำคือผมนำเข้า ข้อมูลทั้งหมดจากรุ่นที่ ไฟล์ที่เราเป็นเพียงแค่การมองหาที่ และใช่ ดังนั้นสิ่งอื่นที่มาใหม่ ขึ้นเมื่อคุณจัดการกับ โดยเฉพาะอย่างยิ่งฐานข้อมูล คือการที่คุณสามารถระบุ ฟังก์ชั่นที่ได้รับการเรียกว่าก่อน ทุกคำขอและฟังก์ชั่นที่ได้รับ เรียกว่าหลังจากที่ขอทุกการใช้นี้ ฟังก์ชั่นการร้องขอ app.before มัณฑนากร และอื่น ๆ นี้จะได้รับการดำเนินการ ที่ใดก็ตามที่ฟังก์ชั่นนี้ นี้ไม่จำเป็นต้องเป็น เรียกว่าก่อนที่จะมีการร้องขอ แต่มักจะเป็นสิ่งที่ เหมาะสมที่จะเรียกมันว่า คุณสามารถระบุสิ่งที่ฟังก์ชั่น คุณต้องการที่จะได้รับการเรียกที่นั่น ดังนั้นผมจึงระบุ initialize_db นี้ ฟังก์ชั่นที่เราได้กลับมาอยู่ในโมเดล ไฟล์ดังนั้นก่อนการร้องขอทุกท่าน ต้องการที่จะเชื่อมต่อกับฐานข้อมูล มีสองที่แตกต่างกัน วิธีที่คุณสามารถทำเช่นนี้ คุณสามารถทำเช่น @app. ฉัน เชื่อว่ามันเป็น after_request และความแตกต่างระหว่าง after_request และ teardown_request, คือว่า after_request จะเกิดขึ้น ถ้าขอจริงเป็นสิ่งถูกต้อง ดังนั้นเฉพาะในกรณีที่ คำขอที่ประสบความสำเร็จ ถ้าไม่มีอะไรผิดพลาด แต่ teardown_request ที่เกิดขึ้นในกรณีที่ประสบความสำเร็จ ร้องขอหรือในกรณีของข้อผิดพลาด ดังนั้นโดยปกติคุณต้องการ ใช้ teardown_request, ถ้าคุณต้องการที่จะทำ บางสิ่งบางอย่างที่แตกต่างกันโดยเฉพาะอย่างยิ่ง ในกรณีที่มีข้อผิดพลาด แต่สำหรับการปิดฐานข้อมูล ไม่ว่าจะประสบความสำเร็จหรือถ้ามันล้มเหลว เราทำคุณต้องการที่จะตัดการเชื่อมต่อ จากฐานข้อมูล ดังนั้นจึงเรียกว่า db.close บนวัตถุฐานข้อมูล ขอให้สังเกตว่า teardown_request ใช้เวลาในการยกเว้น เพื่อให้คุณสามารถตรวจสอบว่ามีจริง ข้อผิดพลาดเมื่อมันถูกปิดลง แต่ที่นี่หวังว่ามี ไม่ได้เป็นจำนวนมากทั้งจากข้อผิดพลาด ดังนั้นเราเพียงแค่การจัดเรียงของที่ไม่สนใจ เอาล่ะและส่วนที่เหลือของมันไม่ได้เลวร้ายเกินไป ดังนั้นเมื่อเราไปที่หน้าบ้าน เรากลายเป็นแม่แบบ home.html นี้ ที่จะเปิดขึ้น ผ่านอยู่ในโพสต์ เท่ากับและสิ่งนี้ ไม่คือจำได้ว่าเรามีการโพสต์นี้ รูปแบบดังนั้นเราจึงเลือกโพสต์ทั้งหมด แล้วสิ่งที่คุณสามารถทำได้อีก คุณสามารถระบุคำสั่ง WHERE ที่ คุณสามารถระบุ โดยสั่งซื้อและเพื่อให้เราใช้ ทั้งหมดของการโพสต์ว่า ได้รับเลือกและจากนั้น เราสั่งพวกเขาโดย post.date.descending และที่จะระบุเมื่อ พวกเขาเป็นจริงออกมา หนึ่งล่าสุด จะเป็นครั้งแรกอย่างหนึ่ง และแล้วเราผ่านที่เป็น แม่แบบ home.html, จึงขอเปิดขึ้นจริง แม่แบบที่รวดเร็วจริงๆ และใช้เวลาดูที่วิธีการที่ทำงาน และนี้ไม่ได้ HTML ที่ดี แต่ หวังว่าเราสามารถมุ่งเน้นหลาม เพื่อให้มีการเชื่อมโยงเพื่อเพิ่มใหม่ โพสต์และอื่น ๆ นี้ระบุเส้นทาง ภายในขวดที่เรา กำหนดซึ่งเป็นสิทธิที่นี่ นี่คือเส้นทางที่โพสต์ใหม่ และเราระบุว่าที่นี่ และนั่นคือการเชื่อมโยงที่จะไป เส้นทางภายในเซิร์ฟเวอร์ขวด สิ่งที่น่าสนใจมากขึ้น นี้สำหรับวงที่นี่ ดังนั้นเราระบุว่านี้ พารามิเตอร์โพสต์ที่ ถูกส่งผ่านเข้ามา ฟังก์ชั่น render_template, สำหรับโพสต์ของทุกคนในการโพสต์ วัตถุที่ได้รับผ่าน เราต้องการที่จะพิมพ์ออกมา ชื่อโพสต์ใน H1, แล้วดังต่อไปนี้เราต้องการที่จะพิมพ์ออกมา ข้อความที่โพสต์ภายในวรรค และที่นี่เราสามารถทำได้จริง เรียกฟังก์ชันหลาม เพื่อให้เราสามารถเรียก strftime, ST-RF-เวลา และคุณสามารถส่งผ่านในรูปแบบของสตริง ที่คุณต้องการพิมพ์ข้อมูลออกมาใน ดังนั้นมันสวยดีที่คุณสามารถ จริงเรียกใช้ฟังก์ชันงูใหญ่นี้ จากภายในที่นี่ คุณไม่จำเป็นต้องที่จะทำในรูปแบบ ด้านการควบคุมเพราะจริงๆ การจัดรูปแบบวันที่เป็นสิ่งที่ คุณต้องการที่จะจัดการภายในมุมมอง และทั้งหมดของเหล่านี้ร้อยละ สิ่งที่ไม่สำคัญสุด ถ้าคุณมองขึ้นเอกสาร สำหรับฟังก์ชัน strftime ในหลาม, จะระบุทั้งหมดเหล่านี้ สิ่ง แต่ที่ของ ว่าตอนที่เรากำลังมองหา ที่หน้าบ้านที่นี่ มันรูปแบบนี้ด้วยดี วันที่และจะระบุ AM หรือ PM, แต่ปกติถ้าเรา ไม่ได้มีที่นี่, คุณอาจจะได้รับขยะบางอย่าง วันที่ไม่ได้ดูดีมาก และจากนั้นเราระบุ post.text และที่ฉันสามารถทำได้ ได้นำคู่ของ เส้นแบ่งที่นี่เพียง ที่จะทำให้ช่องว่างระหว่างแต่ละโพสต์ ดังนั้นผมคิดว่าสิ่งที่สำคัญที่สุด สิ่งที่อยู่ในตัวอย่างนี้ คือการที่คุณสามารถใช้สำหรับวง และนี่คือคล้ายกับ สิ่งที่คุณสามารถทำได้ใน PHP คุณสามารถย้ำผ่าน ทุกอย่างที่ได้รับผ่านใน ดังนั้นแทนที่จะต้องทำ คัดลอก / วางคัดลอก / วางทุก HTML ให้ คุณเพียงแค่ต้องเขียนครั้งเดียวแล้ว คุณสามารถย้ำกว่าทั้งหมดของการโพสต์ และนี่คือสิ่งที่ ทั่วไปที่คุณต้องการ จะทำอย่างไรเมื่อคุณมีจำนวนมากของข้อมูล เป็นที่สำหรับทุกอย่างในข้อมูลของคุณ คุณต้องการที่จะทำสิ่งที่คล้ายกัน และจากนั้นก็เพียงแค่จำไว้ว่าเมื่อคุณ ต้องการที่จะพิมพ์ออกมาบางสิ่งบางอย่างอย่างชัดเจน ใน HTML ที่คุณใช้ วงเล็บคู่ที่นี่ แต่แล้วเมื่อคุณต้องการระบุ ข้อมูลบางอย่างเกี่ยวกับสภาพการ หรือเกี่ยวกับการห่วงคุณ ใช้วงเล็บเปอร์เซ็นต์ ดังนั้นจะกลับไปหลาม รหัสเพื่อให้อธิบาย สิ่งที่เกิดขึ้นในหลัก เส้นทางเมื่อเราไปที่นั่น มันก็จะแสดงทั้งหมด โพสต์ แต่แล้วคำถาม คือวิธีที่เราจะได้รับจริง โพสต์ลงในฐานข้อมูลซึ่ง เป็นนิด ๆ หน่อย ๆ น่าสนใจมากขึ้น ดังนั้นเมื่อคุณคลิกที่ใหม่ โพสต์ลิงค์ซึ่งเราเห็นที่นี่ มันเปลี่ยนเส้นทางให้คุณแบบฟอร์มนี้ และนี่เป็นเพียงการเรียกร้องง่ายไป ฟังก์ชั่น render_template ที่แล้ว ผ่านไปในการโพสต์ใหม่ในรูปแบบ HTML ดังนั้นลองมาดูที่ว่า ดังนั้นหนึ่งนี้เป็นเรื่องง่ายสวย มันมีรูปแบบ HTML ง่ายซึ่ง จะมีลักษณะนิด ๆ หน่อย ๆ ที่คุ้นเคย ขึ้นอยู่กับรูปแบบใน CS50 การคลัง และเพื่อให้เราระบุที่นี่การกระทำ และที่นี่ถ้าคุณกำลังทำงาน กับ PHP ปกติมัน จะเป็นสิ่งที่ชอบ create.PHP แต่ที่นี่ เราจริงระบุเส้นทาง ภายในเซิร์ฟเวอร์ขวด และเพื่อให้สอดคล้องกับเส้นทางนี้ เส้นทางสร้าง ที่เรามีที่นี่ที่ เราจะไปลงในครั้งที่สอง และเพื่อให้เราระบุว่า มันเป็นวิธีการโพสต์ เพราะเราต้องการที่จะส่ง ข้อมูลแบบฟอร์มนี้และมักจะ เมื่อคุณส่งข้อมูลจากแบบฟอร์ม คุณอาจต้องการที่จะใช้การร้องขอการโพสต์ เพียงเพื่อให้คุณไม่สิ้นสุด ที่มีขนาดใหญ่นี้ URL เทอะทะ แต่คุณยังสามารถใช้การร้องขอการ GET, และผ่านมันไปอยู่กับเส้นทางตัวแปร แต่สำหรับรูปแบบที่มันเป็นเรื่องดี การร้องขอของโพสต์ที่นี่ และอื่น ๆ แล้วเช่นเดียวกับคุณ จะทำอย่างไรกับ HTML และ PHP, คุณสามารถระบุปัจจัยข้อความเหล่านี้ และคุณสามารถระบุชื่อของพวกเขา และนั่นคือชื่อที่จะได้รับผ่าน เป็นวัตถุคำขอภายในขวด แล้วเรามีส่ง ปุ่มที่โพสต์กล่าวว่า และที่นี่โพสต์เป็นชื่อของ ปุ่มเพราะโพสต์บล็อก แต่ที่นี่เป็นวิธีการโพสต์การร้องขอ ดังนั้นผู้ที่มีคำเดียวกัน แต่ที่ไม่เกี่ยวข้องจริง ใช่ จะกลับไปที่รหัสหลาม, เมื่อเราเรียกว่าสร้างวิธีการ สังเกตเห็นว่าที่นี่คุณสามารถ จริงระบุที่อยู่ในเส้นทาง วิธีการร้องขอ ที่คุณต้องการที่จะยอมรับ และอื่น ๆ ที่นี่ผมว่าผมระบุ เพียง แต่ต้องการที่จะยอมรับวิธีการโพสต์ ดังนั้นถ้าจริงผมพยายามที่จะเยี่ยมชมหน้า โดยตรงซึ่งจะใช้การร้องขอการ GET, มันจะบอกฉัน "วิธีการไม่ได้รับอนุญาต." และเพื่อให้คุณมีหน้าเว็บประเภทเช่น ร่างหน้านี้ซึ่งผมก็แค่ จริงๆใช้เป็นวิธีการ รูปแบบจะได้รับการส่ง คุณสามารถระบุว่าคุณทำไม่ได้ ต้องการคนที่จะสามารถไปที่นั่น โดยตรงผ่านทาง GET คำขอที่ หรือถ้าคุณไม่ต้องการ ด้วยเหตุผลบางอย่างมีการร้องขอโพสต์ คุณก็สามารถระบุได้รับที่นี่ แต่ในตัวอย่างนี้เราก็ ต้องการขอโพสต์ที่จะออกไป ดังนั้นเมื่อ create_post เรียกว่าเมื่อ เราไปที่ผ่านการร้องขอการโพสต์ เมื่อใดก็ตามที่คุณไปโดยเฉพาะอย่างยิ่ง เส้นทางที่มีวัตถุคำขอนี้ และเราต้องนำเข้า การร้องขอที่ด้านบนมาก แต่มีการร้องขอนี้ วัตถุที่ได้รับผ่านใน และคุณสามารถเข้าถึงข้อมูลในแบบฟอร์มที่ ซึ่งจะได้รับเต็มไปโดยอัตโนมัติ เมื่อคุณส่งการร้องขอจากแบบฟอร์ม และแล้วสิ่งที่ผมคิด จริงๆเย็นเป็น ว่าวัตถุรูปแบบที่จะได้รับผ่าน ในการเป็นเพียงพจนานุกรมหลามที่ มีถ้าคุณ access-- เพื่อให้ที่นี่ให้ ผมดึง HTM​​L ถัดไปเพียง เพื่อให้คุณสามารถมีที่ เป็นข้อมูลอ้างอิงใช่ดังนั้น ชื่อที่เราระบุที่นี่ สำหรับเขตข้อมูลที่แตกต่างกันดังนั้น ชื่อและข้อความที่เรา แล้วก็ใช้ที่นี่ ขณะที่ดัชนีเป็นข้อมูลรูปแบบ เพื่อให้สะดวกสุด ดังนั้นแล้วเราเรียก post.create ซึ่ง จะสร้างและใส่โดยอัตโนมัติ วัตถุนี้โพสต์ใหม่ลงในฐานข้อมูล และผมคิดว่านี่สร้างฟังก์ชั่น นี่เป็นตัวอย่างที่เย็นจริงๆของวิธีการ กระติกน้ำที่มีประสิทธิภาพและการทำงานกับเรื่องนี้ เพราะถ้าคุณกำลังทำบางสิ่งบางอย่าง ใน PHP, คุณอาจจะต้อง ทำมากของการตรวจสอบ คุณจะต้องแล้ว สร้างการเชื่อมต่อฐานข้อมูล คุณจะต้องแล้ว ดำเนินการแบบสอบถาม SQL, แต่ที่นี่เราก็มีความสุขนี้ post.create ซึ่งเราสามารถทำได้แล้วก็ ได้รับข้อมูลที่ออกมา ของวัตถุคำขอ แล้วผ่านมันลงไปใหม่ โพสต์ที่เรากำลังสร้าง แล้วสุดท้าย สิ่งที่เราต้องการจะทำ คือการเปลี่ยนเส้นทาง ผู้ใช้กลับไปที่บ้าน และเพื่อให้เราใช้นี้ ฟังก์ชั่นการเปลี่ยนเส้นทางขวด และสิ่งที่เราไม่เคยเห็น ก่อนที่จะเป็นฟังก์ชั่น URL นี้ ดังนั้น URL สำหรับฟังก์ชั่นช่วยให้ คุณผ่านในชื่อจริง ฟังก์ชั่นในรหัสหลามของคุณ มากกว่าเส้นทางโดยเฉพาะอย่างยิ่ง ว่ามันเป็นที่ ดังนั้นผมจึงอาจมีได้อย่างง่ายดายเพียง เปลี่ยนเส้นทางผู้ใช้เฉือน ซึ่งจะส่งกลับบ้าน แต่ โดยใช้ URL สำหรับฟังก์ชั่นเป็นสิ่งที่ดี เพราะถ้าคุณเปลี่ยน สถานที่ตั้งของสิ่งที่มี จึงขอบอกว่าผมเปลี่ยน บ้านจะเป็นที่บ้าน / แทน เรื่องนี้จะยังคงกลับมาแล้ว / บ้าน เพราะจริงไปและเงยหน้าขึ้นมอง ชื่อของฟังก์ชันและมัน จะทำให้คุณกลับ URL สำหรับว่า ดังนั้นการจัดเรียงของใน สมมติฐานที่ว่าคุณ มีแนวโน้มที่จะเปลี่ยนสิ่งที่ มีกว่าชื่อของฟังก์ชั่น คุณสามารถใช้นี้จริงๆ URL ที่ดีสำหรับฟังก์ชั่น และสิ่งหนึ่งที่จะตระหนักถึง ที่เป็นเล็กน้อยหากิน คือการที่คุณคิดว่าคุณสามารถทำได้เพียงแค่ โทรเปลี่ยนเส้นทางที่ URL สำหรับ แต่ที่จริงแล้วทุกเส้นทางมี จะกลับมาจัดเรียงของข้อความและ HTML บาง เพื่อให้คุณจริงต้อง โทรกลับเปลี่ยนเส้นทาง มิฉะนั้นคุณจะได้รับสิ่งที่ ที่ไม่ถูกต้องเกี่ยวกับการไม่กลับสตริง เพราะสิ่งเหล่านี้ต้องกลับ HTML ที่คุณต้องการจริงที่จะทำให้ ดังนั้นเมื่อคุณโทรเปลี่ยนเส้นทาง มันเปลี่ยนเส้นทางคุณไปยังหน้านั้น แต่ที่จริงผลตอบแทนของ HTM​​L คุณต้องการที่จะดำเนินการเปลี่ยนเส้นทางที่ กลับไปที่หน้าบ้าน ดังนั้นเราจึงมีสองมุมมองที่แตกต่างกัน เรามีมุมมองที่บ้าน หรือผมคิดว่าผมควรจะพูดว่าแม่ เรามีทั้งสองแม่แบบ แม่แบบของบ้านที่ แสดงทั้งหมดจากการโพสของเราและ แล้วเรามีสิ่งที่โฆษณานี้ และเมื่อคุณคลิกโพสต์มันไป ที่จะเป็นเส้นทางใหม่ภายในขวดที่ แต่เส้นทางที่ไม่จำเป็นต้อง มีแม่แบบที่สอดคล้องกัน คุณไม่ต้องดู อะไร แต่คุณยังสามารถ มีการทำงานที่เกิดขึ้นนี้ ในเบื้องหลัง แล้วคุณจะได้รับการเปลี่ยนเส้นทาง กลับไปที่หน้าบ้าน และแน่นอนมันเป็นเรื่องง่ายที่จะทำงาน ในบาง CSS ดีกว่าลงในแม่แบบ และทำให้ดูมากดีกว่าที่ แต่ทั้งหมดของตรรกะหลัก จะมีในหลาม คำถามใด ๆ เกี่ยวกับตัวอย่างที่? ฉันรู้ว่ามีจำนวนมาก สิ่งที่แตกต่างที่เกิดขึ้นที่นั่น หลายสิ่งหลายอย่างที่เราไม่เคยเห็น ก่อน แต่ชอบอะไร ใช่. ผู้ชม 1: คุณต้องทำอะไร พิเศษในการขัดข้อมูลที่เป็น มาจากรูปแบบหรือไม่ ผมสังเกตเห็นคุณเพียงแค่บอกว่า "สร้าง" EZRA ZIGMOND: ใช่เพื่อให้เป็น จริงที่เป็นจุดที่ดีจริงๆ ดังนั้นคำถามคือคุณ ต้องตรวจสอบและให้แน่ใจว่า ว่าข้อมูลที่ถูกต้องและ ทำเรียงลำดับของการขัดถูใด ๆ เพื่อให้แน่ใจว่ามันเป็นสิ่งที่ถูกต้อง เพราะในขณะที่คุณสามารถดูที่นี่ ฉันไม่ได้ทำอย่างนั้น ดังนั้นเรามาดูสิ่งที่เกิดขึ้น ถ้าผมโพสต์สิ่งว่างเปล่า ดังนั้นมันจะจริงเพียงทำให้ โพสต์ว่างเปล่าและกรอกแบบ DateTime ดังนั้นในความเป็นจริงคุณอาจจะ ต้องการที่จะทำอะไรบางอย่างเช่น อาจจะระบุชื่อถ้าจะมีค่าเท่ากับ สตริงที่ว่างเปล่าแล้วไม่ทำเช่นนี้ หรือเพียง แต่ทำมันถ้าชื่อเป็น ไม่เท่ากับสตริงที่ว่างเปล่า ดังนั้นมันไม่ได้จริงโดยอัตโนมัติ ดูแลที่ขัด สำหรับคุณเพื่อให้คุณยังคงต้องทำอย่างนั้น ใช่คำถามที่ดี ผู้ชมที่ 2: มันไม่ขัด สำหรับการฉีดสืบเนื่อง? คุณรู้หรือไม่? EZRA ZIGMOND: หวังว่า ไม่ว่าแคระ ฉันคิดว่ามันแน่นอนจะสวย ห้องสมุดที่ไม่ดีถ้ามันไม่ได้ทำอย่างนั้น ผมไม่ทราบว่า ฉันต้องไปดูที่ สอบถามว่ามันสร้างขึ้น ผมคิดว่าถ้าผมพิมพ์ใน โพสต์บล็อกที่เรียงลำดับของการมอง เช่นเดียวกับการโจมตีแบบ SQL injection, บางสิ่งบางอย่างเช่นนี้ถ้านี้ เป็นเหมือนช่องรหัสผ่านหรือบางสิ่งบางอย่าง คุณอาจจะทำอะไรเช่นนี้ ผมคิดว่าจะยังคง ได้รับการโพสต์อย่างแท้จริง แต่ผมคิดว่าคนแคระที่ไม่ได้ทำ การเรียงลำดับของการขัดถูของข้อมูลบางส่วน ก่อนที่จะดำเนินการจริงมัน ผู้ชม 1: ช่องข้อความนั่นคือ ออกแบบมาเพื่อใช้ข้อความธรรมดาใช่มั้ย? EZRA ZIGMOND: ใช่มันเป็น ใช่. ดังนั้นผมคิดว่าทั้งหมดของดังนั้นนี่คือ พฤติกรรมที่ถูกต้องที่จะทำอย่างนั้น แต่ฉันคิดว่าคนแคระ หวังว่าจะไม่ทำ การเรียงลำดับของการป้องกันบางส่วนของพวกเขาที่สิ้นสุด และถ้าคุณต้องการที่จะ ตรวจสอบว่ามี เป็นวิธีที่เมื่อคุณสร้างแบบสอบถาม ดังนั้นคุณจึงไม่ต้อง ดำเนินการได้โดยตรง ฉันต้องใช้เวลา ดูเอกสาร แต่คุณจริงสามารถดู SQL ว่ามันคือการสร้าง, และดูที่นั้นและทำให้ แน่ใจว่ามันเป็นสิ่งที่หลบหนี เหตุผลที่คุณอาจจะอีก ต้องการดูของ SQL แคระที่มีการแสดงผลคือถ้า สิ่งที่ดูเหมือนจะเป็นไปช้ามาก ๆ , คุณสามารถดูและดูสิ่งที่มันเป็น ทำจริงเพราะบางครั้ง ง่ายต่อการตั้งใจเพิ่ม ในแบบที่คุณเขียนมัน คุณตั้งใจสามารถมีได้ เลือกฐานข้อมูลทั้งหมดแรก แล้วดำเนินการอะไรบางอย่าง อยู่กับว่าเมื่อคุณจริงๆ หมายถึงการเลือกชุดย่อย ดังนั้นถ้าสิ่งที่ไม่ ค่อนข้างจะถูกต้อง มันเป็นเรื่องดีที่จะดูที่การร้องขอ ที่ได้รับการสร้างขึ้นจริง ใช่. ผู้ชมที่ 2: เมื่อคุณเริ่มต้น ที่คุณใส่ในพอร์ตเป็น 5000 EZRA ZIGMOND: ใช่ ผู้ชม 2: เริ่มต้นกับคนแคระที่ หรือเป็นที่สิ่งที่คุณสามารถเปลี่ยน? EZRA ZIGMOND: ใช่ดังนั้น พอร์ตเป็นค่าเริ่มต้นด้วยขวด หากคุณทำงานได้โดยไม่ต้อง อะไรระบุ, มันจะทำเช่นนั้นโดยอัตโนมัติ ผมเชื่อว่าผมมี เพื่อตรวจสอบนี้ แต่คุณสามารถระบุว่าใน app.run ที่ ฉันคิดว่าคุณสามารถทำสิ่งที่ชอบ พอร์ต = 8080 ขอให้ลองว่าจริงอย่างรวดเร็ว ใช่ดังนั้นคุณก็สามารถระบุ พอร์ต = 8080 และมันจะทำงานได้มี ซึ่งผมคิดว่าถ้าคุณต้องการที่จะใช้มัน ใน IDE ที่ฉันไม่ได้พยายามออกนี้ แต่ผมคิดว่าถ้าคุณ วิ่งบนพอร์ต 8080 คุณอาจจะสามารถ ในการเข้าถึงเซิร์ฟเวอร์ เช่นเดียวกับคุณสำหรับเว็บไซต์ ใช่ แต่มันเป็นเรื่องง่าย การเปลี่ยนแปลงที่ว่าถ้าคุณ มีการจัดเรียงเช่นการส่งต่อพอร์ตใด ๆ สิ่งที่คุณต้องทำ คำถามใด ๆ อื่น ๆ ? ใช่? ผู้ชม 1: ดังนั้นผมเห็นในของคุณ ที่ที่คุณกล่าวถึง คุณจะต้องระบุ ฐานข้อมูลสำหรับแต่ละวัตถุ คุณจะรู้ว่าเกิดขึ้นไม่ ที่ทำให้มันง่ายจริงๆถ้าคุณ มีจำนวนมากของฐานข้อมูล SQLite ที่คุณ ต้องการที่จะใช้สำหรับการตรวจสอบเว็บเดียว ที่คุณก็สามารถระบุพวง ของคนที่แตกต่างกันในรูปแบบของคุณ? EZRA ZIGMOND: ใช่ให้ฉัน เปิดขึ้นจริงอย่างรวดเร็ว ดังนั้นคุณกำลังจะบอกว่าถ้าคุณต้องการที่จะมี พวงของบางสิ่งบางอย่างที่แตกต่างกันอาจจะ ชอบและนักเรียนสำหรับบางคน เหตุผลสิ่งที่ต้องการนั้น ใช่ดังนั้นผมจึงคิดว่า คุณยังแต่ละรุ่น จะต้องยังคงมีเพียงแค่ หนึ่งในฐานข้อมูลที่ได้รับมอบหมายนั้น แต่ถ้าคุณต้องการที่จะมี รูปแบบที่แตกต่างกัน มีวัตถุฐานข้อมูลที่แตกต่างกันที่ได้รับมอบหมาย มันแน่นอนคุณสามารถดำเนินการได้ ดังนั้นถ้าฉันสร้างใหม่ บางสิ่งบางอย่างเช่นนี้ และตอนนี้เป็นนักเรียนที่ มีลักษณะผิดปกติเช่นการโพสต์บล็อก ฉันจะระบุว่า ฐานข้อมูลจะมีค่าเท่ากับ db_2 ที่นี่ ดังนั้นผมคิดว่านั่นคือ วิธีหลักที่คุณสามารถทำเช่นนั้น เย็น. คำถามใด ๆ อื่น ๆ ? ดังนั้นเพียงแค่ให้เสร็จสิ้นขึ้นเล็กน้อย บิตที่นี่มีทรัพยากรบางอย่าง และภาพนิ่งเหล่านี้จะถูกโพสต์ออนไลน์ เพื่อให้คุณจริงจะได้รับการเชื่อมโยงเหล่านี้ ทรัพยากรที่ดีที่สุดจริงๆ เอกสารสำหรับขวด และคนแคระตัวเอง พวกเขากำลังเขียนได้ดีจริงๆผมคิดว่า ดังนั้นเว็บไซต์ขวดอยู่ที่นี่และ พวกเขามีการกวดวิชา QuickStart ว่า จะเดินผ่านที่คล้ายกัน สิ่งที่สิ่งที่ฉันเดินผ่าน แต่ถ้าคุณต้องการการเรียงลำดับของการตรวจสอบใด ๆ สิ่งที่ผมไปมากกว่า หรือคุณคิดว่าผมอธิบาย บางสิ่งบางอย่างในทางที่ทำให้เกิดความสับสน พวกเขาจะต้องมีตัวอย่างที่คล้ายกัน คนแคระมีเอกสารและ พวกเขามีการกวดวิชา QuickStart โทษบอลข้ามตัวแปรหลัก ที่คุณจะต้องการที่จะใช้ ดังนั้นสิ่งที่ฉันพูดคุยเกี่ยวกับ ไม่ซ้ำกันและระบุค่าเริ่มต้น ประเภทที่แตกต่างกันของเขตข้อมูลที่ คุณสามารถใช้เหล่านั้นทุกคนจะมี นอกจากนี้ถ้าคุณมี คำถามเกี่ยวกับคนแคระ, และคุณโพสต์ไว้ใน StackOverflow, คนที่ทำแคระจริง ไปบนและคำตอบเหล่านั้นบางครั้ง หากคุณมีคำถาม, หวังว่า เขาจะสามารถที่จะตอบได้ เพราะเขาเขียนสิ่งที่ทั้ง ผมคิดว่าทุกอย่าง ผมอยากที่จะครอบคลุม ขอบคุณสำหรับการที่ออกมา