[عزف الموسيقى] عزرا زيجموند: مرحبا، الجميع. شكرا ليخرج اليوم. هذه الندوة هي "بيثون تطبيقات الويب مع قارورة ". لذلك، أنا ذاهب ليكون الحديث قليلا عن السبب قد ترغب في استخدام قارورة لجعل تطبيقات الويب مع بيثون، كما عارض لبعض الأطر الأخرى هناك، مثل جانغو، والذي هو الأكثر المعروفة. العنوان الفرعي هو "و بيوي "، وهو أمر ونحن في طريقنا للحديث عن كيفية للتفاعل مع قواعد البيانات SQL. فإنه يجعل من لطيف. لذلك، وهنا فقط المتهدمة سريعة ما أريد أن يذهب أكثر. لذلك، أولا، شريحة واحدة فقط التي ستكون التشغيل السريع، وهو كيفية الحصول على كل شيء وضعت على جهاز الكمبيوتر الخاص بك. انا ذاهب الى أن تثبت هذا على بلدي المحلية الجهاز ماك، لمجرد ذلك حيث أنني قد فعلت ذلك من قبل، أنا أكثر راحة معها، ولكن هذا هو بالتأكيد ممكن على IDE CD50. لذلك، وبعد ذلك، أريد أن إدخال ما هي قارورة، واقناع لكم لماذا يجب أن استخدامه في المقام الأول. ثم، سأعطيك سريعة مثال على ما كنت يمكن القيام به في قارورة، مثال سريع ما يمكنك القيام به في بيوي، وبعد ذلك سوف تظهر لك أكثر كامل تطبيق المثال أن أضع معا أننا يمكن من خلال المشي معا. ثم أخيرا، في الشريحة الأخيرة، ولدي بعض الموارد التي نظرتم في الانترنت لمزيد من المعلومات. هذه ليست كاملة البرنامج التعليمي حول كيفية استخدام قارورة. وأنا آمل أن تترك بعض الوقت للأسئلة. مراقبة أي شخص محليا، فقط مثل، تصرخ في منتصف إذا كان لديك أية أسئلة. من الاشياء سريعة التركيب، إذا كنت ترغب في متابعة على طول، أو إذا كنت ترغب في الحصول على هذا حتى على الجهاز الخاص بك، أنا ذاهب إلى استخدام بايثون 2.7.10. قارورة يعمل مع بيثون 3، لكني أحب باستخدام بايثون 2، لأنه لا يوجد بعض الحزم بيثون أن لا تعمل مع 3 حتى الان. إذا كنت قد قمت بتثبيت برنامج تطبيق السلام، التي هو مدير مجموعة بيثون، اعتقد انه اذا بيثون الخاص بك هو أكبر من أو يساوي 2.7.9، كنت قد ركبت عليه بالفعل، انها السوبر سهلة لتثبيت هذه الحزم. لا يمكنك تثبيت نقطة قارورة، برنامج تطبيق السلام تثبيت بيوي، عادة لديك لتشغيل سودو فقط ذلك أن أذونات العمل بها. وإذا كنت تستخدم السوبر القديم من بيثون نسخة، أوصي تحديث بيثون الخاص بك، أو باستخدام EasyInstall لتثبيت نقطة. لذا، فإن السؤال التالي هو، ما هو قارورة؟ وأعتقد، لأول مرة سؤال معقول كنت أتساءل لفترة طويلة هو، ما هو التطبيق على شبكة الإنترنت؟ لأن هذا هو الكلمة التي I اعتقد يتم طرح حولها الكثير أن لم أكن أعرف حقا. وأعتقد أن الأفضل مثال على ما هو التطبيق على شبكة الإنترنت، هو حقا CS50 المالية، حيث انها ليست في الحقيقة مجرد موقع على شبكة الانترنت، ولكن هذا شيء لك يمكن نوع من التفاعل معها. هناك حسابات المستخدمين و كل أنواع الأشياء المختلفة. لذلك، حيث بالضبط ترسمه الخط الفاصل بين ما هو موقع على شبكة الانترنت، وما هو التطبيق على شبكة الإنترنت، هو نوع من تعسفيا، ولكن اعتقد ان فكرة، انه شيء أكثر من موقع على شبكة الانترنت وانها تطبيق مفيد. لذلك، قارورة هي إطار ل جعل تطبيقات الويب باستخدام بيثون. ونأمل بحلول نهاية هذا، وسوف إقناعك هل يمكن أن أكتب شيئا في الواقع مثل CS50 المالية باستخدام بيثون، وأنا مثل أفضل كثيرا من PHP شخصيا. لذلك، قارورة هو، يسمونه microframework، الذي، أنها تعني انها جدا بسيطة، ولكن للمد. لذلك، ليس لديها إلا ما تحتاج إليه، ولكن إذا كنت تريد المزيد من الميزات، فإنه من السهل لجعلها. ولكن لمجرد انها microframework، لا يعني أنه ليست سوى للمشاريع الصغيرة. لدي الرابط هنا أن يقول أن أوباما استخدم قارورة في عام 2012 لحملته الانتخابية على شبكة الإنترنت، والتي من المؤمل، هو شيء من التأييد. ولكن الشيء الذي أنا أحب حول قارورة غير ذلك، فإنه لا يجعل حقا أي نوع من القرارات بالنسبة لك. فقط لأننا نتحدث عن تطبيقات الويب، لدي لمقارنته ب روبي على القضبان وجانغو، وكلاهما هي الأطر كبيرة، ولكن كلاهما جعل الافتراضات حول كيف تريد التفاعل مع قواعد البيانات، كيف تريد تقديم الخاص بك وجهات النظر، وانهم بالتأكيد جوانب جيدة لذلك. على سبيل المثال، روبي على القضبان يحتوي هذا النظام سجل نشط، وهو لطيف طريقة التفاعل مع البيانات، ولكن إذا كنت ترغب في استخدام روبي على القضبان، كنت نوع من تعادل في ذلك. ولكن مع قارورة، وسوف أكون تظهر لك مع بيوي، يمكنك استخدام أي نوع من قاعدة البيانات التي تريد، ويمكنك فقط سحب أنه في امتدادا إلى قارورة. ولهذا السبب أنا حقا مثل قارورة، انها أنه لا تجعل الافتراضات لك بناء على الأشياء التي لا تحتاج حقا. لذا، لماذا يجب عليك استخدام قارورة؟ من مزايا و، هو فقط في الحقيقة الميزات الأساسية في صلب عليه التي تحتاجها. لذلك، لم يكن لديك ما يدعو للقلق فهم مجموعة كاملة من الأشياء أنك لا تحتاج حقا. لم يكن لديك لداعي للقلق حول إيقاف ميزات أنك لا تحتاج حقا. وكما ذكرت، انها السوبر من السهل إضافة ملحقات في الأشياء أن كنت بحاجة. بعض منهم، قارورة له الدعم الخاصة بهم لذلك. ولذلك لا يوجد شيء يسمى قارورة المشرف، والذي يعكس أن المشرف الفريق الذي يوفر جانغو، والتي تعطيك وسيلة بصرية جميلة لإدارة موقع الويب الخاص بك. ولكن مرة أخرى، إذا كنت صنع شيء بسيط، وربما كنت لا تحتاج إلى المشرف كبير لوحة، لذلك أعتقد أن هذا هو لطيف للغاية. والعيوب هي، أن لديك طاقة أقل من خارج منطقة الجزاء. لذلك، عند فتح أولا قارورة، وفي برنامج بيثون الخاص بك، كنت اكتب فقط من قارورة استيراد *، أو أيا كان، كنت لا بالضبط الحصول على كل الميزات التي قد ترغب. ولذا عليك أن أكثر صراحة قائمة الميزات التي تريدها. ولهذا عيب واحد، ولكن أنا أعتقد أن لبناء صغير على شبكة الإنترنت تطبيقات مثل أنا على وشك أن تظهر لك، وهذا ليس حقا مشكلة. وما هو آخر شيء من المفترض أن أقول، وهو خطأ مطبعي، غير أن هناك أقل موحدة الاتفاقيات حول كيفية استخدام قارورة، فقط لأن هناك ليست كثيرة كما الناس التي تستخدمها مهنيا مقارنة جانغو. لذلك، إذا كنت تبحث شيء من هذا القبيل، "كيف أفعل س" في جانغو، ربما عليك العثور عليه. هناك تصميم جيد الأنماط التي يمكن استخدامها، ولكن مع قارورة، انها نوع من الذهاب طريقتك الخاصة، لمجرد انها مكتبة صغيرة جدا. حتى تلك هي عيوب، ولكن أعتقد أنه لا يزال مكتبة جيدة للاستخدام. لذلك دعونا القفز الحق في قارورة. وهذا بالتأكيد لن أن يكون البرنامج التعليمي الكامل، لكنه لإعطائك فكرة من كيفية تنظيم الأشياء، وهكذا كنت تشعر بالراحة الذهاب الخروج والنظر في وثائق ومعرفة المزيد. لذلك، اسمحوا لي أن تفتح حقا مثال بسيط في البداية، وتظهر لك ما أن يبدو، وبعد ذلك سوف نقوم كسرها نزولا أكثر قليلا. لذلك هذا هنا، اسمحوا لي أن الحصول على التوالي. لذلك، لدي الآن طلبي التوالي. انا ذاهب لفتح سفاري، و انها تعمل على بلدي المضيف المحلي. لذلك أنا ذاهب لمجرد جعل هذا أكبر. ولكن المضيف المحلي: 5000 وهكذا، الآن، كل هذا لا هو، عند زيارة الموقع، ذلك بطباعة "مرحبا قارورة" وهي ليست مفيدة عظمى، ولكن اعتقد انها باردة أن في هذا الملف قليلا هنا، لدينا خادم الويب على التوالي أن يتم طبع شيء. لذا، دعونا ننظر في الواقع في رمز لثانية واحدة، وكسرها نزولا قليلا. هو حجم جيد للجميع هنا؟ لذلك، ونأمل، وكنت إلى حد ما مريحة باستخدام بيثون. أفترض أننا يمكن أن ننظر في بيثون وقراءة من خلال ذلك. إذا كان لديك أي أسئلة حول أي شيء، وأنا يمكن أن تذهب أيضا أكثر من ذلك. وبالتالي فإن السطر الأول، من قارورة، نحن استيراد، قارورة برأسمال "F" وهو نوع من جميع الملامح الرئيسية التي تحتاج إليها. كلما كنت تكتب ملف واستخدام قارورة، كنت تريد الذهاب الى استيراد هذا، لمجرد أن لديه كل الأشياء الرئيسية. والشيء التالي الذي نقوم به، هو أننا استدعاء هذه الدالة قارورة، فقط لإنشاء كائن التطبيق، وكنت دائما ما تريد أن تفعل ذلك. وبعد ذلك، والقفز وصولا الى أسفل بسرعة، وهذا الجزء هو هنا، 'if_name _ == "_ main_"' الذي هو نوع من اتفاقية بيثون. لذلك هذا سيتم تنفيذ إلا إذا كنت تشغيل هذا الملف مباشرة باستخدام بيثون. ثم، فإننا ندعو app.run، والتي سوف في الواقع بدء التطبيق الذهاب. لذلك، وهذا هو الهيكل الرئيسي الذي سيكون لديك في أي تطبيق قارورة، وسوف يكون هذا التطبيق = قارورة (_NAME_)، ثم app.run. لذا، فإن الأمرين بأنني هنا، هي ما نسميه الطرق. لذا، دعونا نتحدث عن توجيه أكثر قليلا. سوف أعود إلى الشريحة. حتى أبسط المفهوم في قارورة والتوجيه. وانها فكرة أنك تخصيص وظائف في بيثون إلى عناوين معينة على صفحة الويب الخاصة بك. لذلك، كلما أردت لإنشاء مسار جديد، استخدام هذا الموقع @ app.route وظيفة الديكور. لذا، إذا كنت معتادا الديكور وظيفة في بيثون، انها هذا المفهوم أن يتيح لك اتخاذ وظيفة وتحيط بها مع شيء آخر. ذلك حقا، ما يفعله هذا الديكور، غير أنه يأخذ وظيفة أقل من ذلك، ويضيف مزيد من المعلومات لذلك، ولكن ما قارورة الواقع لا تجعل ذلك يحدث ليس سوبر حاسمة، ولكن ما هو مهم، غير أنه قبل الطريق، كنت وضع هذا @ app.route، ثم عنوان الطريق، وبالتالي فإن مائل هو ما نحن رأيت عندما نفتح فقط حتى صفحة على شبكة الإنترنت. لذلك هذا هو موقع. انها مجرد مسار مائل. ثم لديك هذه الوظيفة. اسم وظيفة يمكن أن يكون كل ما تريد. لم يكن لديك لبالضرورة عليك القيام به مع الطريق. وبعد ذلك، أيا كان عودة الدالة، وظيفة يجب أن تعود سلسلة. ويمكن أن سلسلة يحتوي HTML أو أي شيء، وهذا هو في الواقع ما سيحصل عاد إلى متصفح الويب الخاص بك كما HTML، وسوف تجعل ذلك. لذلك هذا هو نفس الرمز الذي كان من المثال أنا فقط ركض، لذلك عندما نزور مائل، يدعو وظيفة مرحبا العالم، والتي فقط بإرجاع سلسلة، مرحبا قارورة، وأن يحصل المطبوعة على الشاشة. لذلك هناك مثال آخر، وهو، عند زيارة / مرحبا، فإنه يطبع خارج مرحبا ورد، الذي يجب أن أقول الحقيقة، مرحبا العالم، ولكن دعونا نتظاهر بأن كان متعمدا. لذلك دعونا سحب ما يصل حقيقية سريعة. حتى إذا ذهبت إلى LOCALHOST / مرحبا، فإنه سيتم الآن طباعة أي شيء آخر. لذلك هذا مجرد مثال سريع لكيفية يمكنك إنشاء طريقين مختلفة. لذلك، حتى الآن هذا ليس من المفيد السوبر، ليس هناك الكثير كله يمكنك القيام به، هل يمكن أن تفعل كل ذلك فقط مع وجود صفحات HTML مختلفة، وعند زيارة خاصة الصفحة يقوم بتحميل فقط الصفحة. لذلك دعونا نرى بعض أكثر أشياء مفيدة يمكنك القيام به. لذلك، الشيء الوحيد الذي قد يكون لديك لاحظت في المثال الذي سحبت يصل، هو أنني قد app.run (تصحيح = صحيح). وهكذا، وهذا ما حجة التصحيح لا، هو أنه عند تشغيل خادم الويب الخاص بك، عندما كنت في التطبيق الخاص بك، إذا قمت بتغيير ملف، وسوف تحميل تلقائيا الخادم. وهكذا لم يكن لديك فعلا ل إعادة تشغيل بيثون، وهو أمر مفيد عظمى. أنا يمكن أن تظهر ذلك. اسمحوا لي أن سحب قانون بلدي مع مطبعي في ذلك، والتظاهر بأن الخطأ المطبعي وضعت هناك عمدا لأغراض مفيدة. لذلك دعونا إضافة هذا مرة أخرى. وحتى الآن تقول مرحبا العالم. وسوف حفظه. وإذا كنا سحب نسخة احتياطية المحطة، عليك يقول أن الأمر إعادة التشغيل، لأنه الكشف عن التغيير، وحتى الآن عندما كنا تحديث الصفحة، فإنه سيتم طباعة الشيء الصحيح. لذلك التصحيح مفيد فائقة لذلك. أيضا، إذا كان لديك أي نوع من حادث تحطم طائرة، حتى اسمحوا لي أن هذا الحادث تطبيق من قبل ومن بعد لا ترجع سلسلة. لذا، دعونا يكون ذلك فقط العودة لا يوجد لسبب ما. وبعد ذلك عندما أزور هذه الصفحة، فإنه سوف تعطل فقط، لكن الخادم لا تعطل فقط، فإنه يعطي لك فعلا الظهر مفيدة السوبر تتبع كل ما حدث من خطأ. وما هو لطيف حقا، هو أن في أي خطوة في هذا التتبع الوراء، هل يمكن فتح تفاعلية قذيفة هنا، ونوع من طباعة ما المتغيرات التي تريد أن نلقي نظرة على. وهكذا التصحيح هو حقا مفيدة لمعرفة ما يجري مع الخاص بك الخادم، بدلا من مجرد رؤية شيء في PHP مثل 500 داخلي خطأ في الخادم، الذي هو السوبر عديمة الفائدة. شيء واحد أن تكون على علم، هو انك اذا وضعت التطبيق الخاص بك على الانترنت لذلك فمن مرئية للجمهور، ل لا تريد أن تترك وضع التصحيح على، لأن الناس يمكن في الواقع استخدام هذا التحكم بأنني أظهرت لك لتنفيذ قانون تعسفي. حتى يتمكنوا من طباعة مثل أي الرموز السرية لديك هناك، أنها يمكن أن ننظر بالضبط كيف يعمل موقع الويب الخاص بك. لذلك فمن المفيد حقا للاختبار، ولكن دائما تأكد من إخراجها قبل قمت بنشر أي شيء على الانترنت. حتى عندما كنت تستخدم شيئا مثل PHP، هناك هذه الفكرة يمكنك تمرير المعلومات بين صفحات الويب عن طريق وضع المعلومات في الواقع في URL، وهو طلب GET، ولكن في قارورة، يمكنك فعلا تفعل شيئا نوع من هذا القبيل، من خلال وجود الطريق التي لديها متغير كجزء منه. حتى إذا نظرتم الى هذه مثال على الشاشة هنا، لدينا طريقا هذا ('/ مرحبا /')، وهكذا، إذا قمت بزيارة / مرحبا / شيء، أن شيئا سوف تحصل في الواقع مملوءة في متغير الاسم. وتلاحظ أن وظيفة التي تأتي مع هذا الطريق أن يأخذ في المعلمة اسم، بحيث أنها سوف فعلا الحصول على تمريرها إلى وظيفة. وبعد ذلك، عندما كنت داخل تلك الوظيفة، يمكنك علاج هذا مثل بايثون متغير طبيعي، وحتى ذلك الحين، وسوف طباعة مرحبا، وذلك سيتم ملء الاسم باستخدام بعض التنسيق السلسلة. لذلك لإضافة أجزاء المتغيرات على التوجيه، استخدام قوس الزاوية العلامات. واختياريا، يمكنك استخدام ما يسمى المحول. وهكذا، إذا وضعت هذا الشرح مع القولون، يمكنك تحديد أنه عدد صحيح أو عدد عشري، أو مسار، وسوف تلقائيا تحويل ذلك. يمكنك أيضا القيام التحويل ضمن الدالة بيثون، فقط باستخدام الزهر، ولكن في بعض الأحيان إذا كنت ترغب في التأكد من انها الباحث، يمكنك وضع هذا حكم التحويل في هناك. لذلك دعونا سحب ما يصل مثالا بعض القواعد المتغيرة. حتى هنا، وهذا له نفس الأساسية هيكل مع من قارورة استيراد قارورة، التطبيق = قارورة (_NAME_)، ثم انها تعمل في نهاية المطاف. لدينا هذين مختلفة طرق متغيرة هنا. وأول واحد، هو واحد التي عرضتها في الشريحة، وهي أن فإنه يأخذ فقط في اسم سلسلة وسوف تطبع مرحبا، اسم. وبعد ذلك، والثاني واحد يستخدم التحويل. ولذلك فإن هذا سوف يتم تحويله تلقائيا إلى int، ومن ثم مضاعفة كثافة العمليات، وطباعة هذا الخروج. ونحن لا نفعل أي نوع تحويل داخله لأن قارورة يعتني ذلك. لذلك دعونا الحصول على هذا الركض. عندما يكون لديك قارورة تشغيل التطبيق، يمكنك التحكم-C للخروج منه لوقف الخادم على التوالي. وبعد ذلك سيتم تشغيل المتغيرات. لذلك دعونا نذهب إلى مضيف محلي / مرحبا / عزرا و نأمل، وهذا سوف يقول لي مرحبا. حيث استغرق باسمي في متغير الطريق، وملأها هنا. ولذا فإنني سوف تظهر أيضا سريع مثال على مضاعفة. حتى إذا ذهبت إلى / مزدوجة / 3، فإنه سيتم طباعة 6. لذلك هذا اعتنى تحويل بالنسبة لنا. بحيث يمكنك أيضا القيام بذلك مع تعويم، وشيئا خاصا، إذا كنت بحاجة إلى تحديد شيء من هذا القبيل مسار، أن يتيح ذلك استعرض مائلة، ولكن هذا لا ينبغي أن يكون عادة قضية. حتى الآن نحن لا تزال لديها تم للتو العودة سلاسل، وهي ليست مثيرة جدا للاهتمام. يمكن أن نعود الواقع سلسلة HTML حرفية. لذلك في قانون يمكننا إدراج شيء مثل ب العلامة لجعلها جريئة، ولكن معظم الوقت الذي لا نريد في الواقع أن يكون كتابة التعليمات البرمجية HTML في كود بايثون الخاص بك. فإنه يحصل فوضوي حقا، وانها ليست وقتا طيبا. قارورة يسمح لنا لفصل HTML إلى ما يسمى قالب، وحتى إذا كنت تفكر من حيث نموذج MVC أن كنت على دراية، نأمل، من العمل مع CS50 المالية قليلا، يمكنك التفكير في ملفات بيثون كما يجري أكثر من المراقب المالي، حيث انهم متفاعلين مع كل ما نموذج بيانات قد تكون لديكم. ومن ثم يدعون إلى المشاهدات وتمرير المعلومات إلى أن مشاهدة في ملء المعلومات في HTML التي يحتاجها. وما نسميه تلك المشاهدات هي قوالب في الصف. حتى قارورة يستخدم بيثون أخرى الوحدة النمطية التي فإنه سيتم تلقائيا تثبيت عند تثبيت برنامج تطبيق السلام دعا قارورة جينجا، التي يتيح لك إضافة هذه شروح HTML التي تراها على الشاشة، والتي تمكنك كنت وضعت في أشياء مثل الشرطية، وحلقات في HTML. بحيث يبدو قليلا مثل كيف قد تستخدم PHP داخل ملف HTML، ولكن هذا هو فقط عندما قارورة خادم يخدم حتى ملف HTML، فإنه سيتم تشغيل هذا المحرك النموذجيه و تحليل من خلال هذا وملء ما في. حتى قارورة لديه وظيفة render_template يمكنك أن ترى في الجزء السفلي هنا. وحتى عندما قمت بزيارة هذه الصفحة، و من شأنه أن يجعل هذا قالب hello.html، ثم ملء هذه الصفحة HTML. لذلك دعونا فقط تشغيل هذا حقيقي سريعة، ونرى ما يبدو، وبعد ذلك سوف تذهب من خلال قليلا في مزيد من التفاصيل. لذلك، قوالب الخاص تسير للذهاب في مجلد قوالب. سيبدو تلقائيا داخل مجلد قوالب لهذا القالب. لذلك دعونا فتح هذا الأمر. لذلك، سوف تشغيل المثال قالبي templating. حتى إذا ذهبت إلى / مرحبا / عزرا، كان لديه هذا فظيع، العلامة سرادق البغيضة التي وضعت في. لطيفة جدا، ودينامية للغاية. أنا معجب كبير. ولكن ماذا يحدث إذا اذهب فقط ل، / مرحبا؟ لذلك يقول عادل مرحبا العالم. أنا لم يمر عليه اسم، و ملأ في تلقائيا. لذلك دعونا نرى كيف فعلت ذلك، وكيف يمكننا أن نتخلص من تلك سرادق ربما. حتى هنا، وهذا هو نوع من مثال مثير للاهتمام، إذا كنت معتادا على كيفية التبديل البيانات تعمل في لغة. أقول هذا هو نوع من مثل، هذا النوع من السقوط من خلال، حيث كنت في الواقع تعلق اثنين طرق مختلفة لنفس الوظيفة. لذلك نحن نعلق / مرحبا الطريق و و/ مرحبا / اسم الطريق إلى مرحبا، ونحدده نحن using-- بيثون يتيح لك تحديد الافتراضي ظيفة arguments-- لذلك إذا لم يكن هناك اسم، لذلك إذا ذهبنا إلى مجرد / مرحبا، سيكون تصفية تلقائيا على سبيل المثال يساوي لا شيء. حتى ذلك الحين، ونحن جعل القالب مع اسم = اسم، لذلك سوف تمر في المعلمة اسم تساوي هذه الوظيفة اسم المعلمة، في قالب. أن لا يفسر كيف هو البت في طباعة مرحبا العالم، أو طباعة اسمي. لذلك دعونا ننظر في الواقع في القالب نفسه، ونرى فيها أن يأتي من بينها. لذلك، في هذا القالب، ونحن فعلا بعض المنطق الشرطي، وبعض الناس سوف يقول، كنت في الواقع لا ينبغي أن يكون الكثير من الشرطي منطق ضمن قالب الخاص بك نفسه. يجب أن يكون أكثر داخل تحكم، ولكن لهذا المثال انه شيء صغير جدا. حتى هنا، ونحن تحقق، إذا كان اسم، لذلك إذا كان اسم لا يساوي شيء، إذا كان اسم هو في الواقع صدر في، ثم نحن نقول مرحبا، اسم مع رأس وسرادق، كل هذه HTML عادية، وإلا فإننا سوف طباعة مرحبا، العالم مجرد عادة. حتى بضعة أشياء لإشعار هنا حول كيفية قمت بتهيئة النموذجيه، غير أن كل هذه عبارات شرطية، نوع من مثل كيف يمكننا PHP عندما تريد إدراج بعض PHP، استخدام أقل من السؤال علامة، انه نوع من مماثلة هنا مع ال {٪. حتى هنا، لدينا قانون مشروط لدينا. وبعد ذلك، عندما كنت فعلا تريد أن حرفيا تقييم شيء، والطباعة بها إلى الشاشة، استخدام الأقواس المزدوجة. حتى هنا في أقواس مزدوجة، وبعد ذلك تحديد اسم، بذلك في غضون ذلك، سيكون تقييم لاسم المتغير، الذي صدر من الجهة تقديم وظيفة القالب، بدلا من الطباعة فقط ، وإذا كنا تخلصنا من هذه، سيكون طباعة فقط من كلمة "اسم". لذلك، هذا شيء لمشاهدة ل. ذلك شيء آخر ل الإشعار هو أنه عندما نحن تريد استخدام وظيفة render_template، لدينا في الواقع لاستيراد صراحة من قارورة. وهذا مثال من ونمطية من قارورة، ان لم يكن لديك لاستيراد الأشياء التي لا تحتاج إليها. يمكنك إحضار فقط في الوظائف التي في الواقع لا تحتاج إليها، وهو في بعض الأحيان لطيفة، لذلك كنت لا أن يكون لديك كل هذه الوظائف الجلوس حول ذلك كنت لا تستخدم، ولكن أيضا، إذا كنت قد نسيت أن لك تحتاج إلى استيراد render_template، وربما كنت سوف تحصل على تحذير سيتيح لك ان تعرف عن ذلك. لذلك، وهذا هو النموذجيه. لذلك، نحن اظهرنا كيف ل جعل صفحات ويب بسيطة، وإضافة أكثر قليلا المنطق ل ذلك، من حيث توجيه متغير. فإنه يتيح لك القيام بأشياء مختلفة على أساس ما URL تذهب إلى، وأيضا بعد ذلك، وإعطاء وHTML قليلا أكثر منطقية في حيث الكيفية التي ترغب في تقديم الأشياء. لم يكن لديك لوضع كل HTML الخاصة بك في بيثون الخاص بك، ولكن الى حد كبير كل تطبيق ويب، كنت تريد الذهاب الى بعض الفرز من نموذج البيانات المرتبطة بها. وهكذا تقليديا، وهذا من شأنه يكون شيئا مثل قاعدة بيانات SQL. ويمكنك أن تتفاعل فقط مباشرة مع SQL. الثعبان له، وأعتقد أنه دعا. سكليتي 3. يمكنك فقط استيراد سكليتي 3 و تنفيذ استعلامات SQL مباشرة، ولكن أنا لا أعرف عنك، ولكن في الحقيقة أنا لا أحب، فقط، الكتابة خارج استعلامات SQL. أنه يميل إلى الحصول على الحقيقة منذ فترة طويلة ومعقدة. وهكذا، شيئا أود أن استخدم هو ما المعروفة باسم مكتب إدارة السجلات، وهو وجوه العلائقية رسم الخرائط. ونقطة ل رسم الخرائط وجوه العلائقية، غير أن هناك اثنين مختلفة الطرق التي يمكن أن نفكر في قواعد البيانات. لذلك المثال الذي أستاذ مالان عادة يستخدم في الصف، هو جدول Excel، حيث لديك هذه الصفوف وهذه الأعمدة، وهذا مفيد حقا ل كيف فهي تتمثل في SQL وكيف تتفاعل معها، ولكن طريقة أخرى أنه في الواقع من المفيد أن تفكر في ذلك في بعض الأحيان، هو من حيث الفئات والكائنات. وذلك بدلا من التفكير كل جدول وجود هذا الصف الذي يحتوي على يقين المعلومات، يمكنك فعلا اعتقد انه بأنها كل جدول فئة، وبعد ذلك كل مثيل فئة لديها خصائص معينة. لذلك، في هذا المثال، حالات الطبقة هي الصفوف في الجدول، ومن ثم سيكون كل الممتلكات يكون عمود في الجدول. لذا، فإن مكتب إدارة السجلات التي أحب لاستخدام ما يسمى بيوي. انها صغيرة حقا، نوع من مثل قارورة. أعتقد أنها تسير على ما يرام معا، ولكن هناك الكثير من ORMS أخرى التي يمكنك استخدامها. واحد أكثر شعبية المعروفة باسم SQLAlchemy، وأنا لا أتذكر لماذا أنا أصلا اختار بيوي على SQLAlchemy، أو أود أن أقول لكم لماذا أنا أعتقد أنه من أفضل واحد، لكننا ذاهبون لمجرد استخدام هذا واحدة لأنني أعرف كيفية استخدامها. لذلك، سؤال واحد هو، لماذا يجب أن تهتم باستخدام ORM، بدلا من مجرد مباشرة كتابة الاستفسارات SQL؟ وأعتقد أن أفضل حال، هو أنك لا فعلا لديك لكتابة الاستفسارات SQL. انه من الاسهل بكثير، وأنا سوف تظهر لك، ل تفعل أشياء مثل الاختيار، والإدراج، الحذف، وخاصة إنشاء الجداول. انه من الاسهل بكثير ل إرسال بريد البنية الطبقية، مما هو عليه لهيكلة خلق بيان الطاولة، ولكن شيئا واحدا أن تكون على علم، هو أن سوف ORM قصارى جهدها لمعرفة ما أكثر سوف استعلام SQL كفاءة يكون، ولكن أحيانا يحصل ذلك الخطأ. وخاصة إذا كنت العمل مع قاعدة بيانات كبيرة، يمكنك تلاحظ أن استعلام التي ينبغي لاهثة، وبالفعل اخذ فترة أطول. وإذا نظرتم تحت غطاء محرك السيارة في كيفية واسندت هو تفسير ذلك في SQL، قد أن تفعل شيئا حقا مثير للسخرية، لأنها مجرد نوع من يومئ نواياكم خطأ. و، كانت هناك أوقات حيث لقد كان لتجاوز ذلك، وفقط تنفيذ استفساراتي SQL الخاصة، فقط لأنه كان تحليل بطريقة غريبة. لذلك، هناك بعض النفقات العامة، فقط في الطريق أنه يجمع الخاصة بك البيانات أسفل إلى SQL. لذلك، دعونا ننظر فائقة بسرعة في مثال بسيط لنموذج البيانات التي قد تستخدمها. لذلك، هذا هو رمز بيثون، وذلك ل أول شيء تريد القيام به هو من بيوي استيراد *. لذلك، على عكس قارورة، حيث لديك كل هذه الوحدات الفردية، وتريد استيراد قارورة، و إرسال قالب، والبعض الآخر أننا سوف نرى لاحقا، من بيوي، يمكنك فقط استيراد كل شيء، لأنها مكتبة صغيرة جدا. لذا، فإن أول شيء تريد القيام به، هو في الواقع خلق هذا الكائن قاعدة البيانات. لذلك، لديك ديسيبل = SqliteDatabase، وبعد ذلك اسم قاعدة البيانات الخاصة بك. وهذا سوف فعلا إنشاء كائن قاعدة بيانات التي يمكنك التفاعل مع، مع بيوي. وبعد ذلك، لدينا الفعلية النموذج الذي نريد خلق. لذلك الجدول نريد خلق. لذا، خلال بيوي، كل فئة لديها الجدول الخاص بها ضمن قاعدة البيانات الخاصة بك. لذلك، كل من الفئات ترث من نموذج القاعدة، ونموذج M رأس المال شيء وهذا ما يعرف في بيوي. لذلك، كل من النماذج الخاصة بك ينبغي كما ترث أعلى الفائقة بهم، ينبغي أن ترث من نموذج، ولكن ما هو رائع حقا، غير أنه يمكن أن يكون في الواقع الخاص بك نماذج ترث من بعضهم البعض. والكثير من الوقت، والخاص نماذج البيانات لا بالضرورة جعل التسلسل الهرمي الميراث لطيفة، ولكن الأوقات التي تفعل ذلك، انها لطيفة حقا، لأن لديك نموذج المتأصلة عن بعضها البعض. لذلك، حددنا هذه الفئة "طالب"، والتي يرث النموذج، ولها ثلاث خصائص. أنه يحتوي على ID، وهو وPrimaryKeyField، التي هو الشيء الذي هو المقدمة من peewee، الاسم هو CharField، والصف هو IntegerField. ولذلك فإن هذا قد يكون أو لا يكون كيف CS50 يخزن في الواقع كل درجات الطلاب. لم يكن، ولكن هذه هي الطريقة التي أود أن تفعل ذلك. ومن ثم كان لديه، ضمن هذه الفئة، وهذا هو شيء يمكنك القيام به مع بيثون، هل يمكن أن يكون الطبقات المتداخلة. وهذا شيء ما هو مطلوب من peewee. لذلك، هذه الفئة ميتا، لديك لتحديد أن قاعدة البيانات يساوي الكائن أننا إنشاؤها أعلاه. وهذا يقول ما هو ملف هذا الجدول الذهاب فعلا إلى أن يتضمنها. لذلك هذا هو الشيء الذي لديك للقيام في جميع النماذج الخاصة بك. لديك فقط لتحديد ضمن هذه الفئة ميتا قاعدة البيانات تساوي ديسيبل. فما أفعل عادة، إذا كان لدي مجموعة من نماذج مختلفة، غير أن لدي قاعدة واحدة نموذج، التي عادة ما مجرد دعوة "نموذج القاعدة" الذي يحتوي على الطبقة الفوقية، ويحدد قاعدة البيانات تساوي ديسيبل. وبعد ذلك كل من بلدي نماذج لاحقة سيرث من أن الفئة الأساسية. وبعد ذلك لم يكن لديك ما يدعو للقلق حول إعداد الطبقة ميتا. لذلك، عندما يحصل هذا في الواقع جمعت أسفل إلى بيان SQL، يبدو مثل هذا الشيء سيئة أسفل هنا، "إنشاء جدول هوية الطالب صحيح، " ايا كان. وأعتقد أنه أقصر، هذا الاستعلام SQL الحق هنا، ولكن إذا نظرتم الى هذه الفئة هنا تستطيع أن ترى بالضبط ما يجري. يمكنك ان ترى ما أنواع الحقول هناك، ما انهم مدعوون، وهكذا، وأنا أعتقد أن أبحث في هذا الرمز بيثون هو الكثير أكثر قابلية للقراءة من محاولة لكتابة هذا الاستعلام SQL. لذلك، من أجل الحقيقة استخدام قاعدة البيانات، لدينا للاتصال به داخل بيثون. لذلك، وأنا أكتب عادة وظيفة تسمى initialize_db أن يفعل شيئين. فإنه يأخذ في قاعدة البيانات ديسيبل الكائن و يتصل به، والذي يفتح فقط وقسم إلى قاعدة البيانات. إذا كنت مجرد تشغيل على الرغم من موقع على الجهاز المحلي، أنها ليست صفقة كبيرة عظمى للقلق حول توصيل وفصل، ولكن إذا كنت تقوم بتشغيل على موقع على شبكة الانترنت، ل نريد أن نتأكد من أنه كلما مستخدم يتصل به، عندما يغلق الموقع، وأنها قطع حتى يتسنى لك لم يكن لديك حفنة من الناس متصل إلى قاعدة البيانات الخاصة بك في كل مرة. وبعد ذلك، عند الاتصال بقاعدة البيانات، الذي تريد الاتصال به db.create_tables، وسرد نماذج لما تريد لإنشاء الجداول. حتى هنا، أريد فقط أن إنشائه لهذا الطالب. وبعد ذلك، ما هو مهم، هو أن تحديد آمن = صحيح معظم الوقت. فما هذا البيان لن تفعل، هو أنه يخلق الجداول ل نموذج الطالب، ولكن فقط إذا كان هذا الجدول لم يفعل ذلك تم إنشاؤها بالفعل. هذا ما يحدد آمنة. لذلك لن الكتابة الجدول الموجودة لديك، انها سوف تخلق فقط جديدة الجدول إذا لم يكن هناك أحد هناك. لذلك، يمكنك إنشاء فقط الجداول مرة واحدة باستخدام SQL. ومن ثم يكون هذا الجلوس قاعدة البيانات هناك، ومن ثم الاتصال في كل مرة، ولكنها عادة ما تكون لطيفة فقط ل وضعت في هذه الدعوة create_tables، بحيث، إذا قمت بحذف أي وقت مضى بك عندما قاعدة بيانات تشغيل الويب الخاص بك التطبيق مرة أخرى، فإنه سيتم إعادة إنشائها. لذلك، فقط للتأكد من أن آمنة يتم تحديد ليكون صحيحا، أو سوف تجد البيانات الخاصة بك فقط الحصول على مضروب في كل مرة. وبعد ذلك، يمكنك الاتصال فقط initialize_db لإقامة اتصال، وخلق الجداول إذا لزم الأمر. لذلك، والشيء الأكثر شيوعا ان كنت تريد القيام به، أو واحدة من أكثر الأمور المشتركة، هو في الواقع لادخال الأشياء إلى قاعدة البيانات الخاصة بك. وهكذا، بدلا من الاضطرار لكتابة إدراج INTO بيان مع كل من القيم المحددة، يمكنك الاتصال في الواقع وظيفة على فئة الطلاب. لذلك، عند إنشاء فئة أن يرث من نموذج، كان لديه هذا خلق الأسلوب. لذلك، يمكنك القيام الدرجة name.create، ويمكنك تحديد المعلمات التي تريد تمريرها في. لذلك، إذا كنت ترغب في إضافة بعض الطلاب لمثالنا CS50 كتاب الصف، وسوف أضع في ديفيد، الذي لديه بتقدير جيد جدا، لديه 95. وبالأصالة عن نفسي، الذين لا تفعل على ما يرام في CS50، ولدي 50. وهكذا، والشيء الجميل ما تفعله هذه الوظيفة خلق، هو أن تقوم بإرجاع سبيل المثال، أو صف واحد، أنه تم إنشاؤها ضمن الجدول، وحتى ذلك الحين قمت بتخزين أنه في متغير، والعمل معها في وقت لاحق. يمكنك تغيير حولها، والتي سوف تظهر مثال. لاحظ أنني لم لديك لتحديد الهوية، لأنه هو PrimaryKeyField، فإنه سيتم تلقائيا زيادة فإنه إذا لم تقم بتحديد ذلك. و، في الواقع، وربما كنت لا ينبغي أن تحديد ذلك، لأنك ربما عن طريق الخطأ هزم ID شخص آخر. وكنت تريد أن تجعل تأكد من أنها فريدة من نوعها. لذلك، في الواقع، أكثر الشيء المشترك تريد القيام به، ربما هو اختيار من من قاعدة البيانات بمجرد لديهم الكثير من المعلومات في هناك. وهكذا، إذا كنت ترغب في الحصول على كل شيء، ذلك ما يعادل اختر نجمة من بيان الطلاب، فإنه سيكون مجرد student.select. وهذا سيتيح لكم مرة أخرى مجموعة مع كل من الطالب الكائنات في ذلك ان كنت تكرار عبر تريد. يمكنك الحصول على الأشياء للخروج منه. والأكثر من ذلك الوقت، كنت لا نريد فقط أن تفعل حدد، كنت فعلا تريد لتحديد شيء. وهكذا، يمكنك سلسلة معا هذه المكالمات وظيفة، مثل كيف تفعل سلسلة معا البيانات في SQL. لذلك يمكنك أن تفعل student.select (). حيث في هذا المثال. وبعد ذلك، يمكنك تحديد الشروط، فقط باستخدام بيثون الطبيعي القيم المنطقية للتحقق من الأشياء. لذلك، في هذه الحالة، وتريد أن لحد ما كنت اختيار ل، حيث student.grade يساوي 50، وstudent.name يساوي عزرا، بحيث مجرد الحصول على لي للخروج منه. ولاحظ أحد حقا الشيء خفية هنا أنه إذا كنت ترغب في تحديد وو / أو وأو / أو، في بيثون، وكنت تستخدم عادة، أعتقد أن كلمة "و" في الواقع، ولكن هنا كنت تستخدم علامة الضم واحد، وهو عادة المشغل المختصة بالبت، ولكن في هذه الحالة الخاصة، مجرد وسيلة للبيوي يفعل ذلك، استخدام واحد العطف لتحديد "و". هذا شيء I تختلط كثيرا، ولكنه لا يأتي أن كثيرا من الناحية العملية. وبعد ذلك، مرة واحدة لديك كل من الطلاب من قاعدة البيانات، مرة واحدة كنت قد فعلت كنت حدد وارتداء الخاص بك أو أيا كان، يمكنك استخدام حلقة foreach، تماما مثل العادية في بيثون، مع أي نوع من مكرر أو مع أي نوع من مجموعة. حتى تتمكن من القيام، على الصورة في student.select (). عرج إعادة (Student.grade <75)، وهكذا هذه الإرادة أعاد على كل طالب في الجدول الذين الصف أقل من 75، والتي في هذه الحالة، لا يزال لي فقط. ثم هل يمكن أن تفعل شيئا داخل تلك الحلقة، مثل ارسال لي رسالة بالبريد الالكتروني وتقول لي فعلا بدوره مجموعتي مشكلة. لذلك، شيء آخر يمكنك القيام به، هو أنه من السهل حقا لتحديث الصفوف داخل الجدول. لذلك، تذكر مرة أخرى هنا، عندما تم إدراج، أخذت القيمة التي كان إرجاعها بواسطة student.create، وأنا تعيينه لاسم دعا عزرا. وحتى الآن، يمكنك تغيير القيم داخل هذا المثال، فقط وكأنك الطبقة العادية في بيثون. حتى تتمكن من ضبط ezra.grade = 95 و التي سيتم تحديث النسخة المحلية، ولكن إذا كنت فعلا تريد ارتكاب هذا التغيير على قاعدة البيانات، لديك لدعوة ezra.save، بحيث يمكنك استدعاء الأسلوب. حفظ على سبيل المثال. وحتى الآن، لقد تغيرت بنجاح الصف بلدي داخل قاعدة البيانات. لذلك، ثم دعونا نقول أنني ننشغل تغيير الصف بلدي داخل قاعدة البيانات. أستاذ مالان وعلى الارجح تريد حذف لي من الصف، وهكذا يمكن استدعاء .delete طريقة سبيل المثال فقط على هذا الشيء. لذا، إذا كنت تريد الذهاب العودة إلى هذه الحلقة هنا، وفعلا، بدلا من ذلك إرسال رسائل البريد الإلكتروني فقط من الطلاب الذين الصف أقل من 75، أردت حذفها، في هذه الحلقة هل يمكن استدعاء المثال s.delete. وآخر شيء تريد القيام به، غير كلما كنت تأسيس اتصال، وكنت فعلت مع عملك، الذي تريد الاتصال به db.close، حيث ديسيبل هو أن قاعدة البيانات الكائن الذي كان لدينا من قبل. وتريد التأكد من أن كل شيء يحصل مغلقة من. رائع. وحتى الآن، ولدي تطبيق المثال. لقد النوع من قبل من صنع كل شيء فقط وحتى لا يكون هناك أي ترميز الحية الأخطاء، ولكن يمكننا من خلال المشي ونرى كيف سيكون وضع قارورة وبيوي معا، وجعل التطبيق بسيطة. أسميها CS50 خرف، وانها نوع من منصة بلوق بسيطة. لذلك، أولا، أنا تشغيله و إظهار ما يبدو، وبعد ذلك يمكننا أن ننظر أكثر في التعليمات البرمجية. حسنا، لذلك دعونا فقط تشغيل هذا. بارد، وأنا سوف تجعل هذه أصغر قليلا. انها ليست جميلة جدا، لمجرد لم أكن جعل الكثير من CSS، ولكن ما تقوم به هو، له قاعدة البيانات هذه من بلوق وظائف، وغني عن طريق كل من لهم، وأنه سيتم عرض لهم على الصفحة في ترتيب آخرها. وحتى هذه ليست سوى بعض المشاركات ان كنت قد حفظها في قاعدة البيانات. لذلك إذا أردنا أن خلق جديد آخر، يمكننا أن نذهب إلى إضافة وظيفة جديدة، ونحن يمكن أن تدخل عنوان آخر، لذلك شيء من هذا القبيل، CS50 الندوة. نجاح باهر، حقا تتمتع الندوة. رائع. ثم تضغط آخر، وأنها سوف توجيهك إلى الصفحة الرئيسية، ثم سترى أن تم إضافة آخر مشاركة. ونحن لا تزال لديها كل منها هناك. وحتى الآن، دعونا خطوة من خلال كل من رمز ونرى كيف يتم تنفيذ هذا. لذلك، أعتقد أن أول ما دعونا نلقي نظرة على، هو في الواقع النماذج. وهناك الكثير من الوقت، وعندما كنت تصميم شيء، تريد أن نفكر أولا حول كيفية وأنت تسير لتمثيل البيانات الخاصة بك، ومن ثم تصميم الأشياء حول ذلك، حتى أن كل شيء له معنى. وهذا هو في الواقع كيف فعل ذلك عندما كنت جعل هذا، جلست والفكر، ماذا أريد في آخر. لذلك، هنا، لدينا نفس الهيكل ان كنت بالذكر في وقت سابق، حيث نقوم به ديسيبل = Sqldatabase ('posts.db'). في الواقع، وربما كنت لا تريد إلى رمز القرص الثابت في قواعد البيانات اسمك. التي يجب أن تكون على الأرجح معلمة أن يتم تخزينها في مكان ما، ربما في ملف التكوين، ولكن في مثال صغير مثل هذا، انه بخير إلى رمز الثابت الذي في. وحتى الآن، لدينا هذه الفئة بوست، الذي يرث من نموذج القاعدة. وكان لديه، مرة أخرى، ID = PrimaryKeyField. في الواقع، إذا لم تقم بتحديد، إذا أنا فعلا تخلصوا من هذا، ثم بيوي سنتخذ رعاية خلق هذا المجال ID تلقائيا، وسوف تلقائيا جعله أساسي، والتي أعتقد هو لطيف حقا، لأن العادة، هذا شيء كنت تريد أن يكون، ولكن أود أن وضعه في على وجه التحديد، فقط حتى أتذكر أنه في هناك. ولكن إذا لم تقم بتحديد ذلك، أنه سيكون هناك تلقائيا. حتى ذلك الحين، ولدي التاريخ الذي هو DateTimeField، وجميع تلك المجالات المختلفة، إذا كنت النظر في وثائق بيوي، انها سوف أعطيك قائمة مختلفة أنواع الحقول التي يمكنك استخدامها. بالنسبة للجزء الأكبر، انها مماثلة لما كنت انظر في SQL. حتى لا يكون هناك CharField، ل VarCharFields، TextFields، وهي مدة طويلة جدا النصوص، مثل بلوق وظيفة يحتمل، DateTimeFields، DoubleFields، FloatFields، كل شيء من هذا القبيل. ويمكنك تمرير في حجج أخرى لذلك، وهو ما لم يحدد هنا. يقول، على سبيل المثال، كنت لا تريد ل السماح ظيفتين لديهم نفس العنوان، هل يمكن تحديد شيء من هذا القبيل فريدة من نوعها = صحيح، وهذا مجرد معلمة إضافية ل الحقل الذي عندما يجمع عليه في SQL، فإنه سيتم تحديد أنه يجب أن تكون فريدة من نوعها. يمكنك أيضا تحديد شيء من هذا القبيل غير فارغة وجميع الأشياء الأخرى تفعل عادة في SQL. لذلك، وهذا هو بسيط جدا النموذج الذي لديه تاريخ. لاحظ هنا، داخل DateTimeField، I المحدد ما هو الافتراضي. I المحدد لها أن تكون datetime.datetime.now، بسبب الطريقة التي هذا يحصل تقييمها، فالتقييم الواقع وعندما datetime.now يحصل إدخالها في قاعدة البيانات. أعتقد ذلك، كنت قد لمضاعفة التحقق من هذا، ولكن إذا فعلت شيئا من هذا القبيل، ثم سيكون تقييم الواقع أن مرة واحدة، وبعد ذلك التاريخ والوقت سيكون دائما هو نفسه. لذلك، فقط إذا كنت تفعل شيئا مع datetimes، الاختيار مزدوج أن أنه عندما تقييم في الواقع يحصل على إدراجها، وإلا قد يكون الخلط. هذا العنوان هو مجرد CharField، التي يوجد هي أكثر الحجج يمكنك تمرير في تحديد بالضبط كم كنت تريد أن تكون، ولكن هنا، هذا لا يهم حقا. والنص سيكون نص آخر بأكملها، وهذا ما سيكون الحقل النصي لمجرد أنك تريد السماح لها أن تكون سلسلة طويلة جدا. ثم لدينا هذه ميتا الفئة الفرعية أن فقط يحدد أننا نريد قاعدة البيانات حيث يتم فتح هذا فعلا ما يصل إلى أن يكون الكائن ديسيبل أن لدينا هنا. وآخر شيء لدينا هنا، هو مجرد هذه الوظيفة أننا في طريقنا لل استخدام التطبيق من موقعنا الرئيسي تهيئة قاعدة بيانات للاتصال ومن ثم لإنشاء الجدول الموضوع. الآن، دعونا ننظر في التطبيق الرئيسي نفسه. لذلك هذا هو واحد لا بأس به أطول قليلا من تلك التي التي شهدناها من قبل، ولكن نأمل يست سيئة للغاية. لذلك، اسمحوا لي أن أتقدم من ذلك. حسنا. لذلك، لاحظ والجزء العلوي I المستوردة مجموعة كاملة من الأشياء الأخرى من قارورة أن ليس لدينا ينظر إليها في الحقيقة من قبل. ونأمل، ونحن يمكن أن تمر كل واحد من هذه واحدة تلو الأخرى والتحدث أكثر من ذلك بقليل عن منهم، مرتبة حسب المثال. لذلك، لدينا قارورة، و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، يمكنك استخدام أقواس مزدوجة هنا، ولكن بعد ذلك عندما تريد تحديد بعض المعلومات عن حالة، أو عن حلقة for، كنت استخدام شريحة في المئة. لذلك، يعود إلى بيثون رمز، بحيث يشرح ما يحدث في الرئيسية الطريق، وعندما نذهب هناك، فإنه يعرض فقط كل المشاركات، ولكن بعد السؤال هو، كيف يمكننا الحصول على الواقع المشاركات في قاعدة البيانات، التي هو أكثر قليلا للاهتمام. لذلك، عندما تنقر على الجديد آخر الارتباط، الذي رأيناه هنا، فإنه الموجهات بكم في هذا النموذج. وهذا مجرد دعوة بسيطة ل وظيفة render_template، الذي ثم يمر في المنصب الجديد في شكل HTML. لذلك دعونا نلقي نظرة على ذلك. لذلك هذا هو واحد بسيط جدا. أنه يحتوي على شكل HTML بسيطة، والتي سوف تبدو مألوفة قليلا، استنادا إلى النماذج في CS50 المالية. وهكذا، فإننا تحديد هنا، والعمل. وهنا، إذا كنت تعمل مع PHP، عادة، سيكون شيئا مثل، create.PHP، ولكن هنا ونحن في الواقع تحديد مسار ضمن الملقم قارورة. وهكذا، يتوافق هذا الطريق لإنشاء الطريق أن لدينا هنا، والتي سنذهب إلى في الثانية. وهكذا، فإننا تحديد أن انها الطريقة آخر، لأننا نريد أن نرسل هذه بيانات النموذج، وعادة عندما كنت ترسل البيانات من نموذج، قد ترغب في استخدام طلب آخر، فقط حتى كنت لا ينتهي مع هذا الكبير، URL غير عملي. ولكن هل يمكن أيضا استخدام طلب GET، وتمريرها في التوجيه مع متغير، ولكن للأشكال، انها لطيفة لطلب وظيفة هنا. وحتى ذلك الحين، مثلك تماما ستفعل مع HTML و PHP، يمكنك تحديد هذه المدخلات النص، ويمكنك تحديد اسم لها، وهذا هو الاسم الذي سوف تحصل مرت في وجوه الطلب في غضون قارورة. ثم لدينا إرسال الزر الذي يقول بوست. وهنا، الموضوع هو اسم زر، لأنه بلوق وظيفة، ولكن هنا، هو آخر طريقة الطلب. حتى تلك هي نفس الكلمة ولكن لا علاقة لها في الواقع. نعم وبالعودة إلى رمز بيثون، عندما طلبنا إلى خلق طريقة، نلاحظ هنا أنه يمكنك تحديد الواقع ضمن الطريق وسائل الطلب التي تريد أن تقبل، وحتى هنا، يمكنني تحديد بأنني أريد فقط لقبول أسلوب آخر. لذلك، إذا كنت في الواقع محاولة لزيارة الصفحة مباشرة، التي تستخدم طلب GET، وسوف اقول لي "أسلوب غير مسموح به." وهكذا، لديك صفحة، نوع من مثل هذه الصفحة إنشاءه، والذي أنا فقط باستخدام حقا كوسيلة ل شكل للحصول على المقدمة، يمكنك تحديد أنك لا نريد من الناس أن يكونوا قادرين على الذهاب إلى هناك مباشرة عن طريق طلب GET، أو إذا كنت لا تريد، لسبب ما، طلب بوست، هل يمكن أن مجرد تحديد يحصل هنا، ولكن في هذا المثال، نحن فقط تريد طلب المشاركة للخروج. لذلك، عندما يتم استدعاء create_post، عندما نحن زيارة هذا عن طريق طلب المشاركة، كلما ذهبت إلى خاص الطريق، وهناك هذا الكائن الطلب، وكان علينا أن استيراد طلبات في أعلى جدا، ولكن هناك هذا الطلب الكائن الذي يتم تمرير في، ويمكنك الوصول إلى بيانات النموذج، والتي سوف تلقائيا الحصول على شغل عند إرسال طلب من نموذج. وبعد ذلك، ما أعتقد هو رائع حقا، هو أن الكائن النموذج للحصول على مر في، هو مجرد القاموس بيثون أن يحتوي، إذا كنت access-- حتى هنا، اسمحوا لي سحب ما يصل HTML بجانبه، فقط حتى تتمكن من أن كمرجع، نعم، لذلك الأسماء التي نحددها هنا للحقول مختلفة، لذلك العنوان والنص، ونحن ثم مجرد استخدام تلك أكثر من هنا كما المؤشرات إلى بيانات النموذج. ولهذا السوبر مريحة. لذلك فإننا ندعو post.create، التي سيتم إنشاء وإدراج تلقائيا هذا الكائن مشاركة جديدة إلى قاعدة البيانات. وأعتقد أن هذا خلق وظيفة هنا هو مثال رائع حقا كيف قوية قارورة و، والعمل مع هذا، لأنه إذا كنت تفعل شيئا في PHP، قد يكون لديك ل تفعل الكثير من التحقق من صحة، عملتم لثم تأسيس اتصال قاعدة بيانات، عملتم لثم تنفيذ الاستعلام SQL، ولكن هنا علينا فقط أن يكون هذا لطيف post.create، التي نستطيع بعد ذلك فقط الحصول على المعلومات من من وجوه الطلب، ومن ثم تمريرها إلى الجديد الرد على أننا بصدد إنشاء. وبعد ذلك، وكان آخر جدا ما نريد القيام به، هو إعادة توجيه يعود المستخدم إلى المنزل. وحتى ونحن نستخدم هذا قارورة إعادة توجيه وظيفة. وشيء أننا لم ير من قبل، كان هذا وظيفة URL. لذلك URL لوظيفة يتيح يمكنك تمرير في الواقع اسم وظيفة في التعليمات البرمجية بيثون الخاص بك، بدلا من طريق معين أنه في. حيث يمكن أن يكون بنفس السهولة إعادة توجيه المستخدم لخفض، التي من شأنها أن إعادته المنزل، ولكن باستخدام URL من أجل وظيفة جميلة، لأنه إذا قمت بتغيير الموقع حيث الأمور، لذلك دعونا نقول أن أغير المنزل ليكون في / الوطن بدلا من ذلك، هذا ما زال ثم العودة / الوطن، لأن يذهب في الواقع وتتطلع اسم الوظيفة، وذلك سوف أعطيك دعم URL لذلك. لذلك، من النوع على افتراض أنك أكثر عرضة للتغيير حيث الأشياء هي، من أسماء الوظائف. يمكنك استخدام هذا حقا URL لطيفة وظيفة. وشيء واحد ليكون على بينة من هذا هو صعبة قليلا، غير أن كنت تعتقد أنك يمكن فقط استدعاء إعادة توجيه على URL ل، ولكن في الواقع كل من مسارات ديك للعودة نوعا من النص وHTML، بحيث يكون لديك فعلا ل العودة الدعوة إعادة التوجيه. خلاف ذلك، سوف تحصل على شيء باطلة حول عدم إرجاع سلسلة، لأن كل هذه يجب أن تعود وHTML كنت فعلا تريد ان تجعل. وهكذا، عند استدعاء إعادة توجيه، فإنه الموجهات بكم في الصفحة، ولكنه يعود في الواقع HTML تحتاج إلى تنفيذ ذلك إعادة توجيه. العودة إلى الصفحة الرئيسية. لذلك لدينا هذه رأيين مختلفين. لدينا شاشة العرض الرئيسية. أو، وأنا أعتقد أن نقول القوالب. لدينا اثنين من هذه القوالب، القالب المنزل الذي يعرض جميع مراكزنا، و ثم لدينا هذا الشيء الإعلان، وعند النقر فوق آخر، فإنه يذهب إلى طريق جديد داخل قارورة، ولكن هذا الطريق لا يعني بالضرورة ديك قالب المقابلة. لم يكن لديك لرؤية أي شيء، ولكن لا يزال بإمكانك يكون هذا العمل سوف وراء الكواليس. ثم تحصل على إعادة توجيه العودة إلى الصفحة الرئيسية. وبالتأكيد، فإنه من السهل أن تعمل في بعض CSS أجمل في قالب وجعل هذا تبدو أجمل كثيرا، ولكن كل من المنطق الرئيسي هناك في بيثون. أي أسئلة حول هذا المثال؟ أعرف أن هناك الكثير من أشياء مختلفة الجارية هناك، الكثير من الأشياء ونحن لم أر من قبل، ولكن مثل أي شيء. نعم. الحضور 1: هل لديك لفعل أي شيء خاص لتنظيف البيانات هذا القادمة من شكل؟ لقد لاحظت قلته للتو "خلق" عزرا زيجموند: نعم، حتى أن في الواقع، وهذا هو نقطة جيدة حقا. لذا فإن السؤال هو، هل تحتاج إلى التحقق والتأكد من أن البيانات صحيحة، و القيام بأي نوع من الغسل للتأكد من أنه غير صحيح، لأنه كما ترون هنا، أنا لا أفعل ذلك. لذلك دعونا نرى ما سيحدث إذا أنا آخر شيء فارغ. لذلك، فإنه سوف في الواقع مجرد تقديم آخر فارغة وملء في التاريخ والوقت. حتى في واقع الأمر، ربما كنت تريد أن تفعل شيئا من هذا القبيل، ربما تحديد ما إذا لقب يساوي سلسلة فارغة، ثم لا تفعل هذا. أو القيام بذلك إلا إذا كان العنوان لا يساوي سلسلة فارغة. لذلك لا فعلا تلقائيا رعاية هذا الغسل بالنسبة لك، لذلك كنت لا تزال بحاجة للقيام بذلك. نعم، سؤال جيد. الحضور 2: هل فرك للحقن تتمة؟ هل تعرف؟ عزرا زيجموند: نأمل، بيوي يفعل ذلك. وأعتقد أنه سيكون بالتأكيد جميلة مكتبة سيئة إذا لم يفعل ذلك. أنا لا أعرف بالضبط. أنا يجب أن ننظر إلى الاستعلام أنه تم إنشاؤه. وأعتقد أنه لو كنت كتبته في بلوق وظيفة هذا النوع من يتطلع مثل هجوم حقن SQL، شيء من هذا القبيل، وإذا كان هذا هو مثل حقل كلمة المرور أو أي شيء، قد تفعل شيئا مثل هذا. أعتقد أن هذا لا يزال الحصول على نشرها حرفيا، ولكن أعتقد أن بيوي لا تفعل نوعا من تنقية البيانات قبل أن ينفذ فعلا. الحضور 1: هذا الحقل النص مصممة لتأخذ نص عادي، أليس كذلك؟ عزرا زيجموند: نعم، هو عليه. نعم. لذلك أعتقد أن كل من، لذلك هذا هو السلوك الصحيح، من شأنها أن تفعل ذلك، ولكن أعتقد أن بيوي نأمل أن تفعل نوعا من الحماية على نهايتها. وإذا أردت الاختيار المزدوج ذلك، هناك وسائل عند إنشاء استعلام. لذلك لم يكن لديك ل تنفيذه مباشرة. ويهمني أن تأخذ النظر في الوثائق، ولكن يمكنك عرض الواقع SQL أنه يولد، ونلقي نظرة على ذلك، وجعل تأكد من أنها الهروب الأشياء. وهناك سبب آخر لماذا قد نريد أن ننظر إلى SQL أن بيوي وإخراج، وإذا ويبدو أن الأمور تسير ببطء حقا، يمكنك إلقاء نظرة ونرى ما به فعلا، لأنه في بعض الأحيان سهلة لإضافة بطريق الخطأ في، والطريقة التي اكتبها، يمكنك الحصول عليه عن طريق الخطأ حدد قاعدة البيانات بأكملها أولا، ثم القيام ببعض عملية الفرز على ذلك، عندما كنت حقا يعني لتحديد مجموعة فرعية. وهكذا، إذا الأمور ليست الذهاب تماما الحق، أنه من الجيد أن نلقي نظرة على الطلب وهذا ما يحصل فعلا ولدت. نعم. الحضور 2: عندما بدأت لأول مرة، كنت وضعت في ميناء 5000. عزرا زيجموند: نعم. الحضور 2: هل الافتراضي مع بيوي، أم أن ذلك شيء يمكنك تغيير؟ عزرا زيجموند: نعم، وبالتالي فإن المنفذ الافتراضي مع قارورة. إذا قمت بتشغيل دون تحديد أي شيء، انها لن تفعل تلقائيا ذلك. أعتقد، كنت قد لمضاعفة التحقق من هذا، ولكن يمكنك تحديد أن في app.run، أعتقد أنك يمكن أن تفعل شيئا مثل، ميناء = 8080. دعونا نعطي أن محاولة حقيقية سريع. نعم، لذلك يمكنك تحديد فقط ميناء = 8080، وأنه سيتم تشغيله هناك، وهو ما أعتقد، إذا أردت لتشغيله على IDE، لم أحاول من ذلك، ولكن أعتقد أنه إذا كنت ركض هو على المنفذ 8080، كنت ربما تكون قادرة للوصول إلى الخادم، مثلك للموقع. نعم، ولكن من السهل لتغيير ذلك إذا كنت لديك أي نوع من مثل ميناء إعادة توجيه الأشياء التي عليك القيام به. أي أسئلة أخرى؟ نعم؟ الحضور 1: لذلك، ورأيت في حياتك النماذج التي، كما ذكرتم، لديك لتحديد قاعدة بيانات لكل كائن. هل يحدث ذلك لمعرفة، هل التي تجعل من السهل حقا إذا كنت لديك الكثير من قواعد البيانات سكليتي التي قمت تريد استخدامه لتطبيق ويب واحد، أنه يمكنك فقط تحديد مجموعة من مختلفة منها في النموذج الخاص بك؟ عزرا زيجموند: نعم، اسمحوا لي فتح أن ما يصل حقيقية سريعة. لذا، كنت تقول، إذا كنت تريد أن يكون حفنة من شيء مختلف، ربما تريد والطلاب، بالنسبة لبعض السبب، شيء من هذا القبيل؟ نعم، لذلك أعتقد أن كنت لا تزال، كل نموذج يجب أن لا تزال لديها فقط قاعدة بيانات واحدة المسندة إليها، ولكن إذا كنت تريد أن يكون النماذج المختلفة التي وقد كائنات قاعدة البيانات المختلفة المعطاة لذلك، يمكنك أن تفعل بالتأكيد ذلك. لذا، إذا أنا خلق جديد، شيء من هذا القبيل، والآن هذا هو الطالب الذي يبدو بشكل غريب مثل بلوق وظيفة، أنا يمكن تحديد أن قاعدة بيانات تساوي db_2 هنا. لذلك، وأعتقد أن هذا هو الطريقة الرئيسية التي يمكن أن نفعل ذلك. رائع. أي أسئلة أخرى؟ وذلك فقط لإنهاء ما يصل قليلا قليلا، وهنا بعض الموارد، وسوف يتم نشر هذه الشرائح على الانترنت حتى تتمكن من الحصول فعلا على هذه الروابط. أفضل الموارد هي في الواقع وثائق قارورة وبيوي أنفسهم. كنت مكتوبة بشكل جيد، على ما أعتقد. لذلك، فإن الموقع قارورة هنا، و لديهم البرنامج التعليمي التشغيل السريع أن والمشي من خلال مشابهة الأمور إلى ما مشيت من خلال، ولكن إذا كنت تريد أي نوع من الاستعراض من الأشياء التي ذهبت فوق، أو كنت تعتقد أن شرحت شيء بطريقة مربكة، سيكون لديهم أمثلة مماثلة هناك. بيوي ديه وثائق، و لديهم البرنامج التعليمي التشغيل السريع أن يذهب أكثر المعالم الرئيسية ان كنت تريد استخدامها. لذا، فإن الأمور تحدثت عن مع الافتراضات فريدة من نوعها، وتحديد، وأنواع مختلفة من الحقول التي يمكنك استخدامها، فإن تلك تكون كلها هناك. أيضا، إذا كان لديك أسئلة حول بيوي، ويمكنك نشرها على ستاكوفيرفلوو، الرجل الذي جعل بيوي الواقع يمضي ويجيب هؤلاء في بعض الأحيان. إذا كان لديك سؤال، ونأمل وقال انه سوف يكون قادرا على الإجابة على هذا السؤال، لأنه كتب كل شيء. أعتقد أن هذا كل شيء كنت أرغب في تغطية. شكرا ليخرج.