1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:03,227 [MUSIC CHƠI] 3 00:00:03,227 --> 00:00:04,705 4 00:00:04,705 --> 00:00:05,830 Ezra ZIGMOND: Hi, tất cả mọi người. 5 00:00:05,830 --> 00:00:08,020 Cảm ơn vì đã đến ngày hôm nay. 6 00:00:08,020 --> 00:00:10,660 Hội thảo này là "Python Web Apps với Flask. " 7 00:00:10,660 --> 00:00:14,510 >> Vì vậy, tôi sẽ nói chuyện một chút về lý do tại sao 8 00:00:14,510 --> 00:00:17,400 bạn có thể muốn sử dụng để làm cho Flask ứng dụng web với Python, như trái ngược 9 00:00:17,400 --> 00:00:21,556 để một số khuôn khổ khác trên mạng, như Django, mà là nổi tiếng nhất. 10 00:00:21,556 --> 00:00:24,330 Phụ đề là "và Peewee, "đó là cái gì 11 00:00:24,330 --> 00:00:27,250 chúng ta sẽ nói về cách để tương tác với cơ sở dữ liệu SQL. 12 00:00:27,250 --> 00:00:29,610 Nó làm cho nó thực sự tốt đẹp. 13 00:00:29,610 --> 00:00:32,390 >> Vì vậy, đây chỉ là một tóm tắt nhanh chóng những gì tôi muốn đi qua. 14 00:00:32,390 --> 00:00:35,520 Vì vậy, đầu tiên, chỉ là một slide đó sẽ là quickstart, 15 00:00:35,520 --> 00:00:38,530 mà là làm thế nào để có được tất cả mọi thứ thiết lập trên máy tính của bạn. 16 00:00:38,530 --> 00:00:41,760 Tôi sẽ được chứng minh điều này trên máy Mac địa phương của tôi, 17 00:00:41,760 --> 00:00:45,220 chỉ vì đó là nơi tôi đã làm điều này trước đây, tôi cảm thấy thoải mái nhất với nó, 18 00:00:45,220 --> 00:00:48,510 nhưng điều này chắc chắn là có thể trên CD50 IDE. 19 00:00:48,510 --> 00:00:52,050 >> Vì vậy, sau đó, tôi muốn giới thiệu những gì Flask là, 20 00:00:52,050 --> 00:00:55,089 và thuyết phục bạn tại sao bạn nên sử dụng nó ở nơi đầu tiên. 21 00:00:55,089 --> 00:00:56,880 Sau đó, tôi sẽ cung cấp một cách nhanh chóng ví dụ về những gì bạn 22 00:00:56,880 --> 00:01:00,550 có thể làm trong Flask, một ví dụ nhanh về những gì bạn có thể làm trong Peewee, 23 00:01:00,550 --> 00:01:05,010 và sau đó tôi sẽ cho bạn thấy một nhiều hơn ứng dụng ví dụ hoàn chỉnh 24 00:01:05,010 --> 00:01:07,520 mà tôi đặt lại với nhau rằng chúng tôi có thể đi bộ qua lại với nhau. 25 00:01:07,520 --> 00:01:10,040 >> Và cuối cùng, trong slide cuối cùng, tôi có 26 00:01:10,040 --> 00:01:12,730 một số tài nguyên mà bạn nhìn tại trực tuyến để biết thêm thông tin. 27 00:01:12,730 --> 00:01:15,560 Đây không phải là một hoàn thành hướng dẫn về cách sử dụng Flask. 28 00:01:15,560 --> 00:01:18,140 Và tôi hy vọng sẽ để lại một số thời gian cho các câu hỏi. 29 00:01:18,140 --> 00:01:21,050 Bất cứ ai xem tại địa phương, chỉ như thế, hét to ở giữa 30 00:01:21,050 --> 00:01:22,340 nếu bạn có câu hỏi nào. 31 00:01:22,340 --> 00:01:27,150 >> Vì vậy, các công cụ cài đặt nhanh chóng, nếu bạn muốn theo cùng, 32 00:01:27,150 --> 00:01:29,240 hoặc nếu bạn muốn có được điều này up trên máy tính của riêng bạn, 33 00:01:29,240 --> 00:01:32,440 Tôi sẽ được sử dụng Python 2.7.10. 34 00:01:32,440 --> 00:01:35,860 Flask làm việc với Python 3, nhưng tôi thích 35 00:01:35,860 --> 00:01:38,660 sử dụng Python 2, bởi vì có một số gói Python 36 00:01:38,660 --> 00:01:40,910 không làm việc với 3 nào. 37 00:01:40,910 --> 00:01:44,800 Nếu bạn đã cài đặt pip, mà là một người quản lý gói Python, 38 00:01:44,800 --> 00:01:48,190 Tôi nghĩ rằng nếu bạn là Python lớn hơn hoặc bằng 2.7.9, 39 00:01:48,190 --> 00:01:52,220 bạn đã cài đặt trước đó, việc siêu dễ dàng để cài đặt các gói này. 40 00:01:52,220 --> 00:01:54,990 >> Bạn có thể cài đặt làm pip Flask, pip cài đặt Peewee, 41 00:01:54,990 --> 00:01:58,600 thường là bạn phải chạy sudo chỉ do đó các điều khoản làm việc ra. 42 00:01:58,600 --> 00:02:01,080 Và, nếu bạn đang sử dụng một siêu phiên bản cũ của Python, 43 00:02:01,080 --> 00:02:05,100 Tôi khuyên bạn nên cập nhật Python của bạn, hoặc sử dụng để cài đặt EasyInstall pip. 44 00:02:05,100 --> 00:02:09,180 45 00:02:09,180 --> 00:02:11,120 Vì vậy, câu hỏi tiếp theo là, Flask là gì? 46 00:02:11,120 --> 00:02:13,280 Và tôi đoán, lần đầu tiên một câu hỏi hợp lý Tôi tự hỏi 47 00:02:13,280 --> 00:02:15,585 trong một thời gian dài là một ứng dụng web là gì? 48 00:02:15,585 --> 00:02:17,960 Bởi vì đó là một từ mà tôi nghĩ được ném xung quanh rất nhiều 49 00:02:17,960 --> 00:02:19,240 mà tôi thực sự không biết. 50 00:02:19,240 --> 00:02:22,340 Và tôi nghĩ rằng tốt nhất ví dụ về những gì một ứng dụng web là, 51 00:02:22,340 --> 00:02:26,960 thực sự là CS50 Tài chính, nơi nó không thực sự chỉ là một trang web, 52 00:02:26,960 --> 00:02:29,320 nhưng nó là một cái gì đó mà bạn thể loại tương tác với. 53 00:02:29,320 --> 00:02:31,736 Có tài khoản người dùng và tất cả các loại vật khác nhau. 54 00:02:31,736 --> 00:02:35,010 Vì vậy, chính xác nơi bạn vẽ ranh giới giữa một trang web là gì, 55 00:02:35,010 --> 00:02:38,780 và là những gì một ứng dụng web, được loại tùy ý, nhưng tôi đoán các ý tưởng, 56 00:02:38,780 --> 00:02:42,110 nó là một cái gì đó nhiều hơn một trang web và đó là một ứng dụng hữu ích. 57 00:02:42,110 --> 00:02:46,081 >> Vì vậy, Flask là một khuôn khổ cho làm cho các ứng dụng web bằng cách sử dụng Python. 58 00:02:46,081 --> 00:02:48,330 Và hy vọng rằng, bằng cách kết thúc điều này, tôi sẽ thuyết phục bạn 59 00:02:48,330 --> 00:02:52,210 mà bạn thực sự có thể viết một cái gì đó như CS50 Tài chính sử dụng Python, mà tôi 60 00:02:52,210 --> 00:02:53,950 như tốt hơn rất nhiều so với PHP, cá nhân. 61 00:02:53,950 --> 00:02:57,320 >> Vì vậy, Flask là, họ gọi một microframework, theo đó, 62 00:02:57,320 --> 00:02:59,800 họ có nghĩa là nó rất đơn giản, nhưng có thể mở rộng. 63 00:02:59,800 --> 00:03:02,980 Vì vậy, nó có chỉ là những gì bạn cần, nhưng nếu bạn muốn thêm nhiều tính năng, 64 00:03:02,980 --> 00:03:04,522 thật dễ dàng để mang lại cho họ. 65 00:03:04,522 --> 00:03:06,480 Nhưng chỉ vì đó là một microframework, không 66 00:03:06,480 --> 00:03:08,960 có nghĩa là nó chỉ cho các dự án nhỏ. 67 00:03:08,960 --> 00:03:12,590 Tôi có một liên kết ở đây mà nói rằng Obama sử dụng Flask trong năm 2012 68 00:03:12,590 --> 00:03:14,410 cho chiến dịch của mình trang web, mà hy vọng, 69 00:03:14,410 --> 00:03:16,937 là một cái gì đó của một sự chứng thực. 70 00:03:16,937 --> 00:03:18,770 Nhưng điều mà tôi thực sự thích về Flask 71 00:03:18,770 --> 00:03:22,401 là, nó không thực sự làm bất kỳ loại quyết định cho bạn. 72 00:03:22,401 --> 00:03:24,150 Chỉ vì chúng tôi nói về các ứng dụng web, 73 00:03:24,150 --> 00:03:26,940 Tôi phải so sánh nó với Ruby on Rails và Django, cả hai 74 00:03:26,940 --> 00:03:30,450 là các khuôn khổ lớn, nhưng cả hai đều đưa ra giả định 75 00:03:30,450 --> 00:03:33,600 về cách bạn muốn tương tác với cơ sở dữ liệu, 76 00:03:33,600 --> 00:03:36,900 làm thế nào bạn muốn trình bày của bạn quan điểm, và họ chắc chắn 77 00:03:36,900 --> 00:03:38,850 khía cạnh tốt để đó. 78 00:03:38,850 --> 00:03:41,490 >> Ví dụ, Ruby on Rails có hệ thống ghi lại hoạt động này, 79 00:03:41,490 --> 00:03:43,100 mà là một thực sự tốt đẹp cách để tương tác với dữ liệu, 80 00:03:43,100 --> 00:03:45,960 nhưng nếu bạn muốn sử dụng Ruby on Rails, bạn đang loại gắn vào đó. 81 00:03:45,960 --> 00:03:47,835 Nhưng với Flask, như tôi sẽ chỉ cho bạn với Peewee, 82 00:03:47,835 --> 00:03:49,830 bạn có thể sử dụng bất cứ loại của cơ sở dữ liệu mà bạn muốn, 83 00:03:49,830 --> 00:03:53,980 và bạn chỉ có thể kéo mà trong như một phần mở rộng vào Flask. 84 00:03:53,980 --> 00:03:56,350 >> Vì vậy, đó là lý do tại sao tôi thực sự như Flask, đó là nó 85 00:03:56,350 --> 00:04:01,170 không làm cho các giả định cho bạn dựa vào những thứ bạn không cần phải thực sự. 86 00:04:01,170 --> 00:04:04,440 >> Vì vậy, tại sao bạn nên sử dụng Flask? 87 00:04:04,440 --> 00:04:08,230 Những lợi thế là, nó chỉ đã thực sự các tính năng cốt lõi 88 00:04:08,230 --> 00:04:09,420 xây dựng vào nó mà bạn cần. 89 00:04:09,420 --> 00:04:11,980 Vì vậy, bạn không phải lo lắng về hiểu một bó toàn bộ những thứ 90 00:04:11,980 --> 00:04:13,175 mà bạn không thực sự cần. 91 00:04:13,175 --> 00:04:15,060 Bạn không cần phải phải lo lắng về cách tắt tính năng 92 00:04:15,060 --> 00:04:16,620 mà bạn không thực sự cần. 93 00:04:16,620 --> 00:04:21,082 >> Và, như tôi đã đề cập, đó là siêu dễ dàng để thêm vào phần mở rộng của điều 94 00:04:21,082 --> 00:04:21,790 mà bạn cần. 95 00:04:21,790 --> 00:04:24,700 Một số trong số họ, có Flask hỗ trợ riêng của mình cho nó. 96 00:04:24,700 --> 00:04:28,230 Vì vậy, có một cái gì đó gọi là Flask admin, mà phản ánh admin 97 00:04:28,230 --> 00:04:32,060 panel rằng Django cung cấp, mang đến cho bạn một cách trực quan đẹp 98 00:04:32,060 --> 00:04:33,405 để quản lý trang web của bạn. 99 00:04:33,405 --> 00:04:35,280 Nhưng một lần nữa, nếu bạn làm một cái gì đó đơn giản, 100 00:04:35,280 --> 00:04:39,550 có thể bạn không cần một quản trị lớn bảng điều khiển, vì vậy tôi nghĩ rằng đó là siêu đẹp. 101 00:04:39,550 --> 00:04:45,940 Và những khó khăn là, mà bạn có ít năng lượng ra khỏi hộp. 102 00:04:45,940 --> 00:04:49,660 Vì vậy, khi bạn lần đầu tiên mở ra Flask, và trong chương trình Python của bạn, 103 00:04:49,660 --> 00:04:53,150 bạn chỉ cần gõ từ Flask nhập khẩu *, hoặc bất cứ điều gì, 104 00:04:53,150 --> 00:04:55,957 bạn không chính xác có được tất cả các các tính năng mà bạn có thể muốn. 105 00:04:55,957 --> 00:04:58,540 Và vì vậy bạn phải rõ ràng hơn danh sách các tính năng bạn muốn. 106 00:04:58,540 --> 00:05:01,990 Vì vậy, đó là một bất lợi, nhưng tôi nghĩ rằng để xây dựng web nhỏ 107 00:05:01,990 --> 00:05:04,782 các ứng dụng như tôi sẽ được hiển thị bạn, đó không phải là thực sự là một vấn đề. 108 00:05:04,782 --> 00:05:07,281 Và những gì là điều cuối cùng là phải nói, đó là một lỗi đánh máy, 109 00:05:07,281 --> 00:05:10,240 là có rất ít chuẩn ước cho cách sử dụng Flask, 110 00:05:10,240 --> 00:05:12,400 chỉ vì không có nhiều người sử dụng nó một cách chuyên nghiệp 111 00:05:12,400 --> 00:05:13,191 so với Django. 112 00:05:13,191 --> 00:05:16,380 Vì vậy, nếu bạn nhìn một cái gì đó như thế, "làm thế nào để tôi làm x" trong Django, 113 00:05:16,380 --> 00:05:18,190 có thể bạn sẽ tìm thấy nó. 114 00:05:18,190 --> 00:05:20,260 >> Có thiết kế tốt mẫu mà bạn có thể sử dụng, 115 00:05:20,260 --> 00:05:22,660 nhưng với Flask, nó loại đi theo cách riêng của bạn, 116 00:05:22,660 --> 00:05:24,850 chỉ vì nó là một thư viện khá nhỏ. 117 00:05:24,850 --> 00:05:27,100 Vì vậy, đó là những nhược điểm, nhưng tôi nghĩ rằng 118 00:05:27,100 --> 00:05:29,370 rằng nó vẫn là một thư viện tốt để sử dụng. 119 00:05:29,370 --> 00:05:31,909 >> Vì vậy, chúng ta hãy chỉ nhảy ngay vào Flask. 120 00:05:31,909 --> 00:05:34,200 Điều này chắc chắn sẽ không là một hướng dẫn đầy đủ, 121 00:05:34,200 --> 00:05:37,480 nhưng nó cung cấp cho bạn một ý tưởng làm thế nào để cấu trúc vật, 122 00:05:37,480 --> 00:05:40,790 và do đó, bạn cảm thấy thoải mái đi tắt và nhìn vào các tài liệu hướng dẫn 123 00:05:40,790 --> 00:05:42,570 và tìm hiểu thêm. 124 00:05:42,570 --> 00:05:48,500 >> Vì vậy, hãy để tôi mở ra một thực sự Ví dụ đơn giản lúc đầu, 125 00:05:48,500 --> 00:05:50,737 và cho bạn thấy những gì mà trông như thế, và sau đó chúng tôi sẽ 126 00:05:50,737 --> 00:05:52,070 phá vỡ nó xuống nhiều hơn một chút. 127 00:05:52,070 --> 00:05:56,160 >> Vì vậy, ở đây, hãy để tôi làm cho nó chạy. 128 00:05:56,160 --> 00:06:06,800 129 00:06:06,800 --> 00:06:09,750 Vì vậy, bây giờ tôi có ứng dụng đang chạy của tôi. 130 00:06:09,750 --> 00:06:15,910 Tôi sẽ mở Safari, và nó đang chạy trên máy chủ địa phương của tôi. 131 00:06:15,910 --> 00:06:19,360 Vì vậy, tôi chỉ cần đi để làm cho lớn hơn. 132 00:06:19,360 --> 00:06:23,960 Nhưng localhost: 5000 133 00:06:23,960 --> 00:06:27,650 >> Và như vậy, ngay bây giờ, tất cả điều này là, khi bạn truy cập các trang web, 134 00:06:27,650 --> 00:06:31,490 nó in ra "Hello Flask," mà không phải là siêu hữu ích, 135 00:06:31,490 --> 00:06:34,630 nhưng tôi nghĩ nó rất tuyệt đó trong tập tin này nhỏ ở đây, 136 00:06:34,630 --> 00:06:37,390 chúng tôi có một máy chủ web chạy được in ra một cái gì đó. 137 00:06:37,390 --> 00:06:40,500 Vì vậy, chúng ta hãy thực sự nhìn tại các mã cho một thứ hai, 138 00:06:40,500 --> 00:06:43,080 và phá vỡ nó xuống một chút. 139 00:06:43,080 --> 00:06:45,260 Là kích thước tốt cho tất cả mọi người ở đây? 140 00:06:45,260 --> 00:06:51,560 >> Vì vậy, hy vọng, bạn đang hơi thoải mái sử dụng Python. 141 00:06:51,560 --> 00:06:55,820 Tôi giả định rằng chúng ta có thể nhìn vào Python và đọc qua nó. 142 00:06:55,820 --> 00:06:59,290 Nếu bạn có bất kỳ câu hỏi về bất cứ điều gì, tôi cũng có thể đi qua đó. 143 00:06:59,290 --> 00:07:03,974 >> Vì vậy, dòng đầu tiên là, từ Flask, chúng tôi nhập khẩu, Flask với số vốn "F" 144 00:07:03,974 --> 00:07:06,140 được sắp xếp của tất cả các Các tính năng quan trọng mà bạn cần. 145 00:07:06,140 --> 00:07:08,890 Bất cứ khi nào bạn đang viết một tập tin và sử dụng Flask, 146 00:07:08,890 --> 00:07:12,120 bạn sẽ muốn nhập khẩu đó, chỉ vì đó có tất cả mọi thứ chính. 147 00:07:12,120 --> 00:07:15,400 Điều tiếp theo chúng ta làm, là chúng tôi gọi hàm Flask này, chỉ 148 00:07:15,400 --> 00:07:19,270 để tạo ra một đối tượng ứng dụng, và bạn luôn luôn muốn làm điều đó. 149 00:07:19,270 --> 00:07:25,960 >> Và sau đó, nhảy xuống đáy một cách nhanh chóng, điều này một phần ở đây là, 150 00:07:25,960 --> 00:07:28,760 'if_name _ == "_ main_"' là sắp xếp của một ước Python. 151 00:07:28,760 --> 00:07:32,750 Vì vậy, đây sẽ chỉ thực hiện nếu bạn chạy file này trực tiếp bằng cách sử dụng Python. 152 00:07:32,750 --> 00:07:36,040 Sau đó, chúng ta gọi app.run, mà sẽ thực sự bắt đầu ứng dụng đi. 153 00:07:36,040 --> 00:07:39,570 >> Vì vậy, đó là cấu trúc chính mà bạn sẽ có trong bất kỳ ứng dụng Flask, 154 00:07:39,570 --> 00:07:48,550 là bạn sẽ có này app = Flask (_NAME_), và sau đó app.run. 155 00:07:48,550 --> 00:07:54,940 >> Vì vậy, hai điều mà tôi có ở đây, là những gì chúng ta gọi là các tuyến đường. 156 00:07:54,940 --> 00:07:57,150 Vì vậy, chúng ta hãy nói về định tuyến hơn một chút. 157 00:07:57,150 --> 00:07:58,430 Tôi sẽ quay trở lại slide. 158 00:07:58,430 --> 00:08:02,540 >> Vì vậy, cơ bản nhất khái niệm trong Flask được định tuyến. 159 00:08:02,540 --> 00:08:06,750 Và đó là ý tưởng mà bạn gán các chức năng trong Python 160 00:08:06,750 --> 00:08:11,280 đến các địa chỉ cụ thể trên trang web của bạn. 161 00:08:11,280 --> 00:08:13,930 Vì vậy, bất cứ khi nào bạn muốn để tạo ra một con đường mới, 162 00:08:13,930 --> 00:08:16,500 bạn sử dụng @ này app.route chức năng trang trí. 163 00:08:16,500 --> 00:08:19,770 Vì vậy, nếu bạn không quen với trang trí chức năng trong Python, 164 00:08:19,770 --> 00:08:24,160 đó là khái niệm này mà cho phép bạn có một chức năng 165 00:08:24,160 --> 00:08:26,800 và bao quanh nó với cái gì khác. 166 00:08:26,800 --> 00:08:30,140 >> Vì vậy, thực sự, những gì trang trí này không có gì, là nó mất chức năng bên dưới nó, 167 00:08:30,140 --> 00:08:33,409 và nó cho biết thêm nhiều thông tin với nó, nhưng những gì thực sự Flask 168 00:08:33,409 --> 00:08:37,480 không làm cho điều đó xảy ra không phải là siêu rất quan trọng, nhưng những gì là quan trọng, 169 00:08:37,480 --> 00:08:43,640 là trước khi các tuyến đường, bạn đặt @ này app.route, và sau đó 170 00:08:43,640 --> 00:08:46,480 địa chỉ của các tuyến đường, do đó, các dấu gạch chéo là những gì chúng tôi 171 00:08:46,480 --> 00:08:48,360 thấy khi chúng ta chỉ cần mở trang web. 172 00:08:48,360 --> 00:08:49,580 Vì vậy, đó là trang chủ. 173 00:08:49,580 --> 00:08:51,037 Nó chỉ là những đường gạch chéo. 174 00:08:51,037 --> 00:08:52,370 Và sau đó bạn có chức năng này. 175 00:08:52,370 --> 00:08:54,453 Tên của hàm có thể là bất cứ điều gì bạn muốn. 176 00:08:54,453 --> 00:08:56,930 Nó không phải nhất thiết phải làm gì với các tuyến đường. 177 00:08:56,930 --> 00:08:59,440 Và sau đó, bất cứ điều gì của trả lại chức năng, 178 00:08:59,440 --> 00:09:01,730 chức năng phải trả lại một chuỗi. 179 00:09:01,730 --> 00:09:03,740 Và chuỗi mà có thể chứa HTML hoặc bất cứ điều gì, 180 00:09:03,740 --> 00:09:06,920 và đó thực sự là những gì sẽ nhận trả lại cho trình duyệt web của bạn như là HTML, 181 00:09:06,920 --> 00:09:08,200 và nó sẽ làm điều đó. 182 00:09:08,200 --> 00:09:12,030 >> Vì vậy, đây là cùng một mã đó là từ các ví dụ 183 00:09:12,030 --> 00:09:16,430 mà tôi chỉ cần chạy, vì vậy khi chúng tôi ghé thăm dấu gạch chéo, nó gọi một hàm Hello World, mà 184 00:09:16,430 --> 00:09:20,470 chỉ cần trả về một chuỗi, Hello Flask, và đó được in trên màn hình. 185 00:09:20,470 --> 00:09:27,290 >> Vì vậy, có một ví dụ khác, đó là, khi bạn truy cập / hello, 186 00:09:27,290 --> 00:09:30,370 nó in ra Xin chào Lời, thực sự nên nói, Hello World, 187 00:09:30,370 --> 00:09:32,010 nhưng chúng ta hãy giả vờ đó là cố ý. 188 00:09:32,010 --> 00:09:35,140 Vì vậy, hãy kéo mà lên thật nhanh. 189 00:09:35,140 --> 00:09:41,290 >> Vì vậy, nếu bạn đi đến localhost / hello, nó bây giờ sẽ in một cái gì đó khác. 190 00:09:41,290 --> 00:09:45,680 Vì vậy, đó chỉ là một ví dụ nhanh chóng như thế nào bạn có thể tạo ra hai con đường khác nhau. 191 00:09:45,680 --> 00:09:50,630 >> Vì vậy, cho đến nay đây không phải là siêu hữu ích, có không phải là một toàn bộ rất nhiều bạn có thể làm, 192 00:09:50,630 --> 00:09:55,360 bạn chỉ có thể làm tất cả những gì có có các trang HTML khác nhau, 193 00:09:55,360 --> 00:09:58,000 và khi bạn ghé thăm một cụ thể trang nó chỉ nạp trang. 194 00:09:58,000 --> 00:10:00,864 Vì vậy, chúng ta hãy xem một số chi tiết những điều hữu ích mà bạn có thể làm. 195 00:10:00,864 --> 00:10:03,780 Vì vậy, có một điều mà bạn có thể có nhận thấy trong các ví dụ mà tôi kéo 196 00:10:03,780 --> 00:10:07,160 lên, là tôi đã app.run (debug = True). 197 00:10:07,160 --> 00:10:09,580 Và như vậy, cái gì đây Lập luận debug có, là 198 00:10:09,580 --> 00:10:14,600 rằng khi bạn chạy máy chủ web của bạn, khi bạn đang ở trong ứng dụng của bạn, 199 00:10:14,600 --> 00:10:18,100 nếu bạn thay đổi một tập tin, nó sẽ tự động tải lại các máy chủ. 200 00:10:18,100 --> 00:10:21,160 >> Và do đó bạn không thực sự phải khởi động lại Python, mà là siêu hữu ích. 201 00:10:21,160 --> 00:10:24,020 Tôi có thể thấy. 202 00:10:24,020 --> 00:10:26,960 Hãy để tôi kéo lên mã của tôi với các lỗi chính tả trong nó, 203 00:10:26,960 --> 00:10:30,420 và giả vờ typo đã được đặt ở đó cố ý mang tính hướng dẫn. 204 00:10:30,420 --> 00:10:31,625 Vì vậy, hãy thêm điều này trở lại trong. 205 00:10:31,625 --> 00:10:33,140 Vì vậy, bây giờ nó nói Hello World. 206 00:10:33,140 --> 00:10:34,410 Tôi sẽ lưu nó. 207 00:10:34,410 --> 00:10:36,540 Và nếu chúng ta kéo trở lại lên các thiết bị đầu cuối, bạn sẽ 208 00:10:36,540 --> 00:10:39,520 nói rằng nó khởi động lại, bởi vì nó phát hiện ra một sự thay đổi, 209 00:10:39,520 --> 00:10:43,620 và vì vậy bây giờ khi chúng ta cần nạp trang này, nó sẽ in ra những điều đúng. 210 00:10:43,620 --> 00:10:45,630 >> Vì vậy, debug là siêu hữu ích cho điều đó. 211 00:10:45,630 --> 00:10:48,740 Ngoài ra, nếu bạn có bất kỳ sắp xếp của một vụ tai nạn, vì vậy 212 00:10:48,740 --> 00:10:54,370 hãy để tôi làm crash ứng dụng này bằng cách để nó không trả về một chuỗi. 213 00:10:54,370 --> 00:10:57,540 Vì vậy, chúng ta hãy chỉ cần có nó Không quay trở lại đối với một số lý do. 214 00:10:57,540 --> 00:11:00,810 Và sau đó khi tôi truy cập này trang, nó sẽ chỉ sụp đổ, 215 00:11:00,810 --> 00:11:04,465 nhưng máy chủ không chỉ sụp đổ, nó thực sự mang đến cho bạn một sao siêu hữu ích 216 00:11:04,465 --> 00:11:06,490 dấu vết của tất cả mọi thứ mà đi sai. 217 00:11:06,490 --> 00:11:10,050 Và những gì thực sự tốt đẹp, được mà tại bất cứ bước nào trong dấu vết trở lại này, 218 00:11:10,050 --> 00:11:14,260 bạn có thể mở ra một tương tác vỏ ở đây, và loại in ra những gì 219 00:11:14,260 --> 00:11:17,780 biến mà bạn muốn để có một cái nhìn tại. 220 00:11:17,780 --> 00:11:21,054 >> Và do đó, gỡ lỗi thực sự là hữu ích cho việc tìm ra 221 00:11:21,054 --> 00:11:23,470 những gì đang xảy ra với bạn máy chủ, thay vì chỉ nhìn thấy 222 00:11:23,470 --> 00:11:28,201 một cái gì đó trong PHP như một nội bộ 500 lỗi máy chủ, mà là siêu vô dụng. 223 00:11:28,201 --> 00:11:30,700 Một điều cần phải nhận thức, là rằng nếu bạn đặt ứng dụng trực tuyến của bạn 224 00:11:30,700 --> 00:11:34,260 do đó, nó hiển thị công khai, bạn không bao giờ muốn rời khỏi chế độ gỡ lỗi trên, 225 00:11:34,260 --> 00:11:37,320 bởi vì mọi người có thể thực sự sử dụng giao diện điều khiển mà tôi 226 00:11:37,320 --> 00:11:39,150 cho thấy bạn thực thi mã tùy ý. 227 00:11:39,150 --> 00:11:42,120 >> Vì vậy, họ có thể in ra giống như bất kỳ mã số bí mật mà bạn có trong đó, 228 00:11:42,120 --> 00:11:44,755 họ có thể xem xét chính xác làm thế nào trang web của bạn đang làm việc. 229 00:11:44,755 --> 00:11:46,630 Vì vậy, nó thực sự hữu ích để thử nghiệm, nhưng luôn luôn 230 00:11:46,630 --> 00:11:50,090 làm cho chắc chắn để đưa nó ra trước khi bạn xuất bản bất cứ điều gì trực tuyến. 231 00:11:50,090 --> 00:11:56,640 >> Vì vậy, khi bạn đang sử dụng một cái gì đó như PHP, có ý tưởng này 232 00:11:56,640 --> 00:11:58,920 rằng bạn có thể vượt qua thông tin giữa các trang web 233 00:11:58,920 --> 00:12:03,620 bằng cách đưa các thông tin thực trong URL, đó là một yêu cầu GET, 234 00:12:03,620 --> 00:12:07,490 nhưng trong Flask, bạn có thể thực sự làm điều gì đó đại loại như thế, 235 00:12:07,490 --> 00:12:10,590 bởi có một tuyến đường mà có một biến như là một phần của nó. 236 00:12:10,590 --> 00:12:14,090 >> Vì vậy, nếu bạn nhìn vào điều này Ví dụ trên màn hình ở đây, 237 00:12:14,090 --> 00:12:19,930 chúng ta có một con đường đó là ('/ hello /'), và như vậy, nếu bạn truy cập 238 00:12:19,930 --> 00:12:23,790 / hello / cái gì đó, một điều gì đó sẽ thực sự có được đầy 239 00:12:23,790 --> 00:12:25,490 vào biến tên. 240 00:12:25,490 --> 00:12:27,850 Và nhận thấy rằng các chức năng mà đi kèm với con đường đó 241 00:12:27,850 --> 00:12:31,302 đã để mất trong tham số tên, do đó nó sẽ thực sự 242 00:12:31,302 --> 00:12:32,510 có được thông qua vào hàm. 243 00:12:32,510 --> 00:12:34,190 >> Và sau đó, một khi bạn đang bên trong của chức năng đó, 244 00:12:34,190 --> 00:12:36,420 bạn có thể coi đó như Python một biến bình thường, 245 00:12:36,420 --> 00:12:39,650 và như vậy sau đó, nó sẽ in ra Xin chào, và nó 246 00:12:39,650 --> 00:12:42,000 sẽ điền tên sử dụng một số chuỗi định dạng. 247 00:12:42,000 --> 00:12:48,060 >> Vì vậy, để thêm phần biến với một định tuyến, bạn sử dụng khung góc đánh dấu. 248 00:12:48,060 --> 00:12:51,220 Và tùy chọn, bạn có thể sử dụng những gì được gọi là một công cụ chuyển đổi. 249 00:12:51,220 --> 00:12:56,840 Và như vậy, nếu bạn đặt này chú thích với đại tràng, 250 00:12:56,840 --> 00:13:00,015 bạn có thể xác định rằng đó là một int, hoặc một phao, hay đường dẫn, 251 00:13:00,015 --> 00:13:01,640 và nó sẽ tự động chuyển đổi đó. 252 00:13:01,640 --> 00:13:05,130 Bạn cũng có thể làm việc chuyển đổi trong phạm vi chức năng Python, 253 00:13:05,130 --> 00:13:09,710 chỉ bằng cách sử dụng một diễn viên, nhưng đôi khi nếu bạn muốn đảm bảo rằng nó là một int, 254 00:13:09,710 --> 00:13:12,080 bạn có thể đặt một quy tắc chuyển đổi trong đó. 255 00:13:12,080 --> 00:13:15,930 >> Vì vậy, hãy kéo lên một ví dụ của một số quy tắc biến. 256 00:13:15,930 --> 00:13:21,480 Vì vậy, ở đây, điều này có cùng cơ bản cấu trúc với các từ Flask nhập khẩu 257 00:13:21,480 --> 00:13:25,030 Flask, ứng dụng = Flask (_NAME_), và sau đó nó đang chạy ở cuối. 258 00:13:25,030 --> 00:13:28,050 Chúng tôi có hai khác nhau tuyến đường biến ở đây. 259 00:13:28,050 --> 00:13:29,900 Và một trong những đầu tiên, là cái mà tôi thấy 260 00:13:29,900 --> 00:13:34,230 trong slide, đó là nó chỉ mất trong một chuỗi tên 261 00:13:34,230 --> 00:13:35,650 và nó sẽ in ra Xin chào, Tên. 262 00:13:35,650 --> 00:13:41,410 >> Và sau đó, thứ hai có ai sử dụng các chuyển đổi. 263 00:13:41,410 --> 00:13:44,690 Vì vậy, đây sẽ tự động chuyển đổi nó đến một int, và sau đó tăng gấp đôi int, 264 00:13:44,690 --> 00:13:46,150 và in mà ra. 265 00:13:46,150 --> 00:13:48,220 Và, chúng ta không làm bất kỳ loại chuyển biến trong nó 266 00:13:48,220 --> 00:13:49,594 vì Flask chăm sóc đó. 267 00:13:49,594 --> 00:13:53,181 Vì vậy, hãy chạy này. 268 00:13:53,181 --> 00:13:54,930 Khi bạn có một Flask ứng dụng đang chạy, 269 00:13:54,930 --> 00:13:58,440 bạn có thể kiểm soát-C ra khỏi nó để ngăn chặn các máy chủ đang chạy. 270 00:13:58,440 --> 00:14:02,420 Và sau đó tôi sẽ chạy biến. 271 00:14:02,420 --> 00:14:11,740 >> Vì vậy, chúng ta hãy đi đến localhost / hello / Ezra và hy vọng, điều này sẽ nói lời chào với tôi. 272 00:14:11,740 --> 00:14:14,530 273 00:14:14,530 --> 00:14:20,310 >> Vì vậy, nó mất tên của tôi, trong biến tuyến đường, và nó đầy nó ở đây. 274 00:14:20,310 --> 00:14:23,950 Vì vậy, tôi cũng sẽ hiển thị một cách nhanh chóng ví dụ về tăng gấp đôi. 275 00:14:23,950 --> 00:14:28,600 Vì vậy, nếu bạn đi đến / đôi / 3, nó sẽ in ra 6. 276 00:14:28,600 --> 00:14:31,440 Vì vậy, đây đã chăm sóc việc chuyển đổi đối với chúng tôi. 277 00:14:31,440 --> 00:14:34,190 >> Vì vậy, bạn cũng có thể làm điều đó với float, và một cái gì đó đặc biệt, 278 00:14:34,190 --> 00:14:37,530 nếu bạn cần phải chỉ định một cái gì đó như một con đường, cho phép nó chấp nhận chém, 279 00:14:37,530 --> 00:14:39,155 nhưng đó không phải là một vấn đề thường. 280 00:14:39,155 --> 00:14:41,480 281 00:14:41,480 --> 00:14:43,820 Vì vậy, đến nay chúng tôi, vẫn còn có chỉ được trả lại 282 00:14:43,820 --> 00:14:46,320 dây, mà không phải là rất thú vị. 283 00:14:46,320 --> 00:14:48,730 >> Chúng tôi thực sự có thể trở lại chuỗi HTML đen. 284 00:14:48,730 --> 00:14:54,322 Vì vậy, trong các đoạn mã chúng ta có thể chèn một cái gì đó như b-thẻ để làm cho nó đậm, 285 00:14:54,322 --> 00:14:56,030 nhưng hầu hết thời gian bạn không thực sự muốn 286 00:14:56,030 --> 00:14:58,420 là văn bản HTML trong mã Python của bạn. 287 00:14:58,420 --> 00:15:01,940 Nó được thực sự lộn xộn, và nó không phải là một thời gian tốt. 288 00:15:01,940 --> 00:15:06,430 >> Flask cho phép chúng ta tách ra HTML vào những gì được gọi là Template, 289 00:15:06,430 --> 00:15:09,467 và do đó, nếu bạn đang suy nghĩ về mô hình MVC 290 00:15:09,467 --> 00:15:11,550 rằng bạn đã quen thuộc với, hy vọng, từ làm việc 291 00:15:11,550 --> 00:15:15,520 với CS50 Tài chính một chút, bạn có thể nghĩ về các tập tin Python 292 00:15:15,520 --> 00:15:19,430 như đang được nhiều điều khiển, nơi họ đang tương tác với bất cứ điều gì 293 00:15:19,430 --> 00:15:20,970 mô hình dữ liệu bạn có thể có. 294 00:15:20,970 --> 00:15:24,900 >> Và sau đó chúng được gọi ra để đọc và chuyển thông tin cho rằng Xem 295 00:15:24,900 --> 00:15:28,120 để điền vào các thông tin trong HTML mà nó cần. 296 00:15:28,120 --> 00:15:30,490 Và những gì chúng ta gọi là những người đọc là mẫu trong lớp học. 297 00:15:30,490 --> 00:15:35,280 >> Vì vậy, Flask sử dụng Python khác mô-đun đó nó sẽ tự động 298 00:15:35,280 --> 00:15:38,620 cài đặt khi bạn cài đặt pips Flask gọi Jinja, mà 299 00:15:38,620 --> 00:15:40,885 cho phép bạn thêm những chú thích vào HTML 300 00:15:40,885 --> 00:15:45,140 mà bạn nhìn thấy trên màn hình, cho phép bạn đưa vào những thứ như điều kiện, 301 00:15:45,140 --> 00:15:47,230 và vòng vào HTML. 302 00:15:47,230 --> 00:15:51,140 >> Vì vậy, nó trông giống một chút như thế nào bạn có thể sử dụng PHP trong một tập tin HTML, 303 00:15:51,140 --> 00:15:57,380 nhưng điều này chỉ khi Flask máy chủ phục vụ lên các tập tin HTML, 304 00:15:57,380 --> 00:16:01,610 nó sẽ chạy công cụ khuôn mẫu này và phân tích thông qua điều này và điền vào những điều trong. 305 00:16:01,610 --> 00:16:06,650 Vì vậy, Flask có một chức năng render_template mà bạn có thể nhìn thấy ở phía dưới đây. 306 00:16:06,650 --> 00:16:14,300 Và như vậy khi bạn ghé thăm trang này, nó sẽ làm cho Template hello.html này, 307 00:16:14,300 --> 00:16:16,407 và sau đó điền vào trang HTML này. 308 00:16:16,407 --> 00:16:18,990 Vì vậy, chúng ta hãy chỉ cần chạy thật này nhanh chóng, và xem những gì nó trông giống như, 309 00:16:18,990 --> 00:16:21,198 và sau đó tôi sẽ đi qua một chút chút chi tiết hơn. 310 00:16:21,198 --> 00:16:25,380 311 00:16:25,380 --> 00:16:30,260 Vì vậy, Templates của bạn đang đi để đi trong một thư mục Templates. 312 00:16:30,260 --> 00:16:33,980 Nó sẽ tự động tìm trong Mẫu thư mục dành cho Bản mẫu đó. 313 00:16:33,980 --> 00:16:35,615 Vì vậy, chúng ta hãy mở này lên. 314 00:16:35,615 --> 00:16:47,350 315 00:16:47,350 --> 00:16:50,005 Vì vậy, tôi sẽ chạy ví dụ khuôn mẫu. 316 00:16:50,005 --> 00:16:52,820 317 00:16:52,820 --> 00:17:03,660 >> Vì vậy, nếu tôi đi đến / hello / Ezra, nó có khủng khiếp này, 318 00:17:03,660 --> 00:17:05,930 tag marquee đáng ghét mà tôi đặt trong. 319 00:17:05,930 --> 00:17:08,050 Rất đẹp, rất năng động. 320 00:17:08,050 --> 00:17:09,349 Tôi là một fan hâm mộ lớn. 321 00:17:09,349 --> 00:17:13,900 Nhưng những gì sẽ xảy ra nếu Tôi chỉ cần đi đến, / hello? 322 00:17:13,900 --> 00:17:15,220 Vì vậy, nó chỉ nói Hello World. 323 00:17:15,220 --> 00:17:17,678 Tôi đã không vượt qua nó một cái tên, và nó đầy nó tự động. 324 00:17:17,678 --> 00:17:22,050 Vì vậy, chúng ta hãy xem làm thế nào nó đã làm điều đó, và làm thế nào chúng ta có thể thoát khỏi marquee rằng có thể. 325 00:17:22,050 --> 00:17:26,240 >> Vì vậy, ở đây, đây là loại một ví dụ thú vị về, 326 00:17:26,240 --> 00:17:29,101 nếu bạn đã quen thuộc với cách chuyển đổi báo cáo hoạt động trong một ngôn ngữ. 327 00:17:29,101 --> 00:17:31,350 Nói điều này là loại giống như, mà sắp xếp của một mùa thu qua, 328 00:17:31,350 --> 00:17:34,266 nơi bạn thực sự gắn hai đường khác nhau để cùng chức năng. 329 00:17:34,266 --> 00:17:41,190 Vì vậy, chúng tôi đính kèm / hello tuyến đường và các / hello / route tên Xin chào, 330 00:17:41,190 --> 00:17:45,130 và chúng tôi chỉ định using-- Python giúp bạn xác định chức năng mặc định arguments-- 331 00:17:45,130 --> 00:17:48,300 vì vậy nếu không có tên, vì vậy nếu chúng ta đi chỉ / hello, 332 00:17:48,300 --> 00:17:50,680 nó sẽ tự động lọc tên bằng None. 333 00:17:50,680 --> 00:17:55,010 >> Vì vậy, sau đó, chúng tôi làm cho Template với tên = tên, 334 00:17:55,010 --> 00:17:59,510 do đó, nó sẽ vượt qua trong các tham số tên với các tham số chức năng tên này, 335 00:17:59,510 --> 00:18:00,730 vào Mẫu. 336 00:18:00,730 --> 00:18:04,040 Mà vẫn không giải thích thế nào là quyết định xem có in Hello World, 337 00:18:04,040 --> 00:18:05,100 hoặc in tên của tôi. 338 00:18:05,100 --> 00:18:08,050 Vì vậy, hãy thực sự nhìn vào các mẫu tự, 339 00:18:08,050 --> 00:18:11,610 và nhìn thấy nơi đó là đến từ. 340 00:18:11,610 --> 00:18:18,680 >> Vì vậy, trong bản này, chúng tôi thực sự có một số logic có điều kiện, 341 00:18:18,680 --> 00:18:20,580 mà một số người sẽ tranh luận, bạn thực sự 342 00:18:20,580 --> 00:18:23,730 không nên có rất nhiều điều kiện logic trong Template của bạn chính nó. 343 00:18:23,730 --> 00:18:26,310 Nó nên được nhiều hơn trong Controller, nhưng trong ví dụ này 344 00:18:26,310 --> 00:18:27,476 nó là một cái gì đó khá nhỏ. 345 00:18:27,476 --> 00:18:31,060 Vì vậy, ở đây, chúng tôi kiểm tra, nếu tên, vì vậy nếu tên không bằng None, 346 00:18:31,060 --> 00:18:33,130 nếu một tên thực sự là thông qua tại, sau đó chúng tôi sẽ 347 00:18:33,130 --> 00:18:36,210 nói Xin chào, tên với tiêu đề và vùng lựa chọn, 348 00:18:36,210 --> 00:18:41,490 tất cả HTML bình thường này, nếu không, chúng ta sẽ in ra Hello, World chỉ bình thường. 349 00:18:41,490 --> 00:18:45,820 Vì vậy, một vài điều cần chú ý ở đây về cách bạn định dạng các khuôn mẫu, 350 00:18:45,820 --> 00:18:49,110 là, tất cả các câu điều kiện, 351 00:18:49,110 --> 00:18:54,475 loại giống như cách chúng tôi PHP nó khi bạn muốn chèn một số PHP, 352 00:18:54,475 --> 00:18:58,380 bạn sử dụng ít hơn so với câu hỏi đánh dấu, nó là loại tương tự ở đây 353 00:18:58,380 --> 00:19:00,140 với {%. 354 00:19:00,140 --> 00:19:02,130 >> Vì vậy, ở đây, chúng ta có mã điều kiện của chúng tôi. 355 00:19:02,130 --> 00:19:05,920 Và sau đó, khi bạn thực sự muốn nghĩa là đánh giá một cái gì đó, và in ấn 356 00:19:05,920 --> 00:19:08,710 nó ra màn hình, bạn sử dụng dấu ngoặc kép. 357 00:19:08,710 --> 00:19:12,310 Vì vậy, đây là những dấu ngoặc kép, và sau đó chúng tôi ghi rõ tên, 358 00:19:12,310 --> 00:19:15,500 vì vậy trong đó, nó sẽ đánh giá để tên biến, mà 359 00:19:15,500 --> 00:19:18,860 đã được thông qua từ làm mẫu hàm, 360 00:19:18,860 --> 00:19:21,484 thay vì chỉ in ấn ra, nếu chúng ta đã thoát khỏi những, 361 00:19:21,484 --> 00:19:23,150 nó sẽ chỉ in ra từ "cái tên." 362 00:19:23,150 --> 00:19:26,340 Vì vậy, đó là một cái gì đó để xem ra cho. 363 00:19:26,340 --> 00:19:29,792 >> Vì vậy, một điều để thông báo là, khi chúng ta 364 00:19:29,792 --> 00:19:31,500 muốn sử dụng chức năng render_template, 365 00:19:31,500 --> 00:19:34,490 chúng tôi thực sự phải nhập khẩu nó một cách rõ ràng từ Flask. 366 00:19:34,490 --> 00:19:36,915 Và đây là một ví dụ về các mô đun của Flask, 367 00:19:36,915 --> 00:19:39,290 rằng bạn không phải nhập khẩu những điều mà bạn không cần. 368 00:19:39,290 --> 00:19:41,290 Bạn chỉ có thể mang lại chức năng bạn thực sự 369 00:19:41,290 --> 00:19:43,450 không cần, mà đôi khi tốt đẹp, do đó bạn không 370 00:19:43,450 --> 00:19:46,560 phải có tất cả các chức năng này ngồi xung quanh mà bạn không sử dụng, 371 00:19:46,560 --> 00:19:49,730 nhưng cũng có thể, nếu bạn quên rằng bạn cần phải nhập khẩu render_template, 372 00:19:49,730 --> 00:19:52,660 có thể bạn sẽ nhận được một cảnh báo mà sẽ cho bạn biết về điều đó. 373 00:19:52,660 --> 00:19:56,700 Vì vậy, đó là khuôn mẫu. 374 00:19:56,700 --> 00:20:01,680 >> Vì vậy, chúng tôi cho thấy làm thế nào để làm cho các trang web đơn giản, 375 00:20:01,680 --> 00:20:04,947 và thêm logic hơn một chút để nó, trong điều kiện của định tuyến biến. 376 00:20:04,947 --> 00:20:08,280 Nó cho phép bạn làm những điều khác nhau dựa trên những gì URL bạn đi đến, và cũng sau đó, cung cấp cho 377 00:20:08,280 --> 00:20:11,950 ý thức HTML hơn một chút trong về làm thế nào bạn muốn làm việc. 378 00:20:11,950 --> 00:20:14,210 Bạn không cần phải đặt tất cả HTML của bạn trong Python của bạn, 379 00:20:14,210 --> 00:20:16,640 nhưng đối với khá nhiều mọi ứng dụng web, 380 00:20:16,640 --> 00:20:21,480 bạn sẽ muốn một số loại của mô hình dữ liệu liên kết với nó. 381 00:20:21,480 --> 00:20:25,560 >> Và do đó, theo truyền thống, điều này sẽ là một cái gì đó giống như một cơ sở dữ liệu SQL. 382 00:20:25,560 --> 00:20:30,280 Và bạn chỉ có thể tương tác trực tiếp với SQL. 383 00:20:30,280 --> 00:20:32,190 Python có, tôi nghĩ rằng nó được gọi là. 384 00:20:32,190 --> 00:20:33,040 SQLite 3. 385 00:20:33,040 --> 00:20:38,454 Bạn chỉ có thể nhập SQLite 3 và thực hiện truy vấn SQL trực tiếp, 386 00:20:38,454 --> 00:20:40,870 nhưng tôi không biết về bạn, nhưng tôi thực sự không thích, chỉ, 387 00:20:40,870 --> 00:20:42,750 viết ra các truy vấn SQL. 388 00:20:42,750 --> 00:20:45,350 Nó có xu hướng để có được thực sự lâu dài và phức tạp. 389 00:20:45,350 --> 00:20:49,180 >> Và như vậy, một cái gì đó Tôi muốn sử dụng là gì 390 00:20:49,180 --> 00:20:53,610 được biết đến như một ORM, mà là một đối tượng quan hệ lập bản đồ. 391 00:20:53,610 --> 00:20:56,890 Và quan điểm của một đối tượng quan hệ lập bản đồ, 392 00:20:56,890 --> 00:21:00,100 là có hai khác nhau cách bạn có thể suy nghĩ về cơ sở dữ liệu. 393 00:21:00,100 --> 00:21:03,240 >> Vì vậy, ví dụ mà Giáo sư Malan thường 394 00:21:03,240 --> 00:21:07,660 sử dụng trong lớp học, là bảng Excel, nơi bạn có các hàng và các cột, 395 00:21:07,660 --> 00:21:10,210 và đó là thực sự hữu ích cho làm thế nào nó được đại diện trong SQL 396 00:21:10,210 --> 00:21:13,170 và cách bạn tương tác với nó, nhưng một cách khác mà nó thực sự 397 00:21:13,170 --> 00:21:16,390 hữu ích để suy nghĩ về nó đôi khi, là về các lớp học và các đối tượng. 398 00:21:16,390 --> 00:21:20,420 >> Vì vậy, thay vì suy nghĩ của mỗi bảng là có 399 00:21:20,420 --> 00:21:23,040 hàng này có số thông tin, bạn có thể thực sự 400 00:21:23,040 --> 00:21:26,100 nghĩ về nó như là mỗi bảng là một lớp học, 401 00:21:26,100 --> 00:21:29,810 và sau đó mỗi thể hiện của Lớp học có tính chất nhất định. 402 00:21:29,810 --> 00:21:35,110 Vì vậy, trong ví dụ này, các trường hợp của lớp học là các hàng trong bảng, 403 00:21:35,110 --> 00:21:37,490 và sau đó mỗi tài sản sẽ là một cột trong bảng. 404 00:21:37,490 --> 00:21:40,840 >> Vì vậy, các ORM mà tôi thích để sử dụng được gọi là Peewee. 405 00:21:40,840 --> 00:21:43,520 Nó thực sự nhỏ, loại giống như Flask. 406 00:21:43,520 --> 00:21:46,760 Tôi nghĩ rằng họ cũng đi cùng nhau, nhưng có rất nhiều ORMs khác 407 00:21:46,760 --> 00:21:47,730 mà bạn có thể sử dụng. 408 00:21:47,730 --> 00:21:52,180 Một trong những phổ biến hơn là được gọi là SQLAlchemy, 409 00:21:52,180 --> 00:21:56,050 và tôi không thể nhớ tại sao tôi ban đầu chọn Peewee hơn SQLAlchemy, 410 00:21:56,050 --> 00:21:58,311 hoặc tôi sẽ cho bạn biết lý do tại sao tôi nghĩ rằng đó là một trong những tốt nhất, 411 00:21:58,311 --> 00:22:01,060 nhưng chúng tôi sẽ chỉ sử dụng này một vì tôi biết làm thế nào để sử dụng nó. 412 00:22:01,060 --> 00:22:04,760 >> Vì vậy, một câu hỏi là, tại sao bạn phải bận tâm bằng cách sử dụng một ORM, 413 00:22:04,760 --> 00:22:07,552 thay vì chỉ trực tiếp viết các truy vấn SQL? 414 00:22:07,552 --> 00:22:09,760 Và tôi nghĩ rằng trường hợp tốt nhất, là bạn không thực sự 415 00:22:09,760 --> 00:22:11,356 phải viết các truy vấn SQL. 416 00:22:11,356 --> 00:22:14,480 Nó dễ dàng hơn nhiều, như tôi sẽ chỉ cho bạn, để làm những việc như lựa chọn, chèn, 417 00:22:14,480 --> 00:22:16,157 xóa, đặc biệt là việc tạo bảng. 418 00:22:16,157 --> 00:22:17,990 Nó dễ dàng hơn nhiều để viết một cấu trúc lớp, 419 00:22:17,990 --> 00:22:22,250 hơn là để cơ cấu Tạo Bảng báo cáo, nhưng có một điều 420 00:22:22,250 --> 00:22:25,710 để được nhận thức, là ORM sẽ cố gắng tốt nhất của mình 421 00:22:25,710 --> 00:22:28,640 để tìm ra những gì nhiều nhất truy vấn SQL hiệu quả sẽ là, 422 00:22:28,640 --> 00:22:30,110 nhưng đôi khi nó được nó sai. 423 00:22:30,110 --> 00:22:32,660 >> Và đặc biệt là nếu bạn đang làm việc với một cơ sở dữ liệu lớn, 424 00:22:32,660 --> 00:22:35,557 bạn có thể nhận thấy rằng một truy vấn mà nên chạy nhanh, 425 00:22:35,557 --> 00:22:36,640 thực sự là mất nhiều thời gian. 426 00:22:36,640 --> 00:22:40,164 Và nếu bạn nhìn dưới mui xe như thế nào ORM được giải thích rằng vào SQL, 427 00:22:40,164 --> 00:22:42,080 nó có thể làm điều gì đó thực sự vô lý, 428 00:22:42,080 --> 00:22:44,371 chỉ vì nó loại ra hiệu ý định của bạn sai. 429 00:22:44,371 --> 00:22:48,080 Và, đã có lần, nơi Tôi đã có để ghi đè lên nó, và chỉ 430 00:22:48,080 --> 00:22:52,429 thực hiện truy vấn SQL của riêng tôi, chỉ bởi vì nó đã được phân tích một cách kỳ lạ. 431 00:22:52,429 --> 00:22:54,220 Vì vậy, có một số trên không, chỉ trong cách 432 00:22:54,220 --> 00:22:58,680 mà nó biên dịch của bạn báo cáo thành SQL. 433 00:22:58,680 --> 00:23:06,200 >> Vì vậy, chúng ta hãy nhìn siêu nhanh tại một ví dụ đơn giản của một mô hình dữ liệu 434 00:23:06,200 --> 00:23:07,350 mà bạn có thể sử dụng. 435 00:23:07,350 --> 00:23:11,880 Vì vậy, đây là mã Python, và do đó Điều đầu tiên bạn muốn làm là từ 436 00:23:11,880 --> 00:23:12,950 Peewee nhập khẩu *. 437 00:23:12,950 --> 00:23:15,850 Vì vậy, không giống như Flask, nơi bạn có tất cả các mô-đun riêng, 438 00:23:15,850 --> 00:23:18,125 và bạn muốn nhập khẩu Flask, và viết một mẫu, và một số người khác 439 00:23:18,125 --> 00:23:20,690 rằng chúng ta sẽ thấy sau này, từ Peewee, bạn chỉ có thể nhập tất cả mọi thứ, 440 00:23:20,690 --> 00:23:22,290 bởi vì nó là một thư viện khá nhỏ. 441 00:23:22,290 --> 00:23:26,490 >> Vì vậy, điều đầu tiên bạn muốn làm, là thực sự tạo ra đối tượng cơ sở dữ liệu này. 442 00:23:26,490 --> 00:23:31,212 Vì vậy, bạn có db = SqliteDatabase, và sau đó là tên của cơ sở dữ liệu của bạn. 443 00:23:31,212 --> 00:23:33,170 Và điều này sẽ thực sự tạo ra một đối tượng cơ sở dữ liệu 444 00:23:33,170 --> 00:23:36,230 mà bạn có thể tương tác với, với Peewee. 445 00:23:36,230 --> 00:23:40,570 >> Và sau đó, chúng tôi có thực tế mô hình mà chúng tôi muốn tạo ra. 446 00:23:40,570 --> 00:23:42,470 Vì vậy, bàn chúng tôi muốn tạo ra. 447 00:23:42,470 --> 00:23:47,270 Vì vậy, trong vòng Peewee, mỗi lớp có bảng riêng của mình trong cơ sở dữ liệu của bạn. 448 00:23:47,270 --> 00:23:52,800 Vì vậy, tất cả các lớp học kế thừa từ các mô hình cơ sở, 449 00:23:52,800 --> 00:23:55,960 và mô hình vốn M là cái gì mà được định nghĩa trong Peewee. 450 00:23:55,960 --> 00:24:02,162 >> Vì vậy, tất cả các mô hình của bạn nên kế thừa như lớp cha cao nhất của họ, 451 00:24:02,162 --> 00:24:04,620 họ nên thừa hưởng từ mô hình, nhưng những gì là thực sự mát mẻ, 452 00:24:04,620 --> 00:24:07,610 là bạn thực sự có thể có của bạn mô hình kế thừa từ mỗi khác. 453 00:24:07,610 --> 00:24:10,530 Và rất nhiều thời gian, bạn mô hình dữ liệu không nhất thiết 454 00:24:10,530 --> 00:24:13,754 làm cho một hệ thống phân cấp thừa kế đẹp, nhưng lần, nơi họ làm, nó thực sự tốt đẹp, 455 00:24:13,754 --> 00:24:15,920 bởi vì bạn có mô hình vốn có từ mỗi khác. 456 00:24:15,920 --> 00:24:19,710 >> Vì vậy, chúng ta định nghĩa lớp này 'học sinh,' mà sẽ thừa kế một mô hình, 457 00:24:19,710 --> 00:24:21,170 và nó có ba đặc tính. 458 00:24:21,170 --> 00:24:24,080 Nó có một ID, đó là một PrimaryKeyField, mà 459 00:24:24,080 --> 00:24:26,920 là một cái gì đó là cung cấp bởi Peewee, tên là một CharField, 460 00:24:26,920 --> 00:24:28,490 và một lớp là một IntegerField. 461 00:24:28,490 --> 00:24:32,260 Vì vậy, điều này có thể hoặc không thể được cách CS50 thực sự lưu trữ tất cả 462 00:24:32,260 --> 00:24:33,650 lớp của học sinh. 463 00:24:33,650 --> 00:24:36,060 Nó là không, nhưng đây là cách tôi sẽ làm điều đó. 464 00:24:36,060 --> 00:24:37,920 >> Và sau đó nó có, trong vòng lớp này, và điều này 465 00:24:37,920 --> 00:24:41,620 là một cái gì đó bạn có thể làm với Python, bạn có thể có các lớp lồng nhau. 466 00:24:41,620 --> 00:24:43,920 Và đây là một cái gì đó đó là cần thiết bởi Peewee. 467 00:24:43,920 --> 00:24:47,250 Vì vậy, lớp Meta này, bạn có để xác định rằng các cơ sở dữ liệu là 468 00:24:47,250 --> 00:24:49,830 bằng với đối tượng mà chúng ta đã tạo ở trên. 469 00:24:49,830 --> 00:24:54,339 Và điều này nói gì là tập tin bảng này thực sự sẽ được chứa trong. 470 00:24:54,339 --> 00:24:57,130 Vì vậy, đây là một cái gì đó mà bạn có làm trong tất cả các mô hình của bạn. 471 00:24:57,130 --> 00:24:59,380 Bạn chỉ cần có để xác định trong lớp Meta này 472 00:24:59,380 --> 00:25:01,400 cơ sở dữ liệu đó là bằng db. 473 00:25:01,400 --> 00:25:03,940 Vì vậy, những gì tôi thường làm, nếu tôi có một loạt các mô hình khác nhau, 474 00:25:03,940 --> 00:25:05,910 là tôi có một cơ sở mô hình, mà tôi thường 475 00:25:05,910 --> 00:25:08,839 chỉ cần gọi "mô hình cơ sở" có lớp Meta, 476 00:25:08,839 --> 00:25:10,380 và nó đặt cơ sở dữ liệu bằng db. 477 00:25:10,380 --> 00:25:13,710 Và sau đó tất cả các mô hình tiếp theo của tôi sẽ kế thừa từ lớp cơ sở đó. 478 00:25:13,710 --> 00:25:16,760 Và sau đó tôi không phải lo lắng về việc thiết lập các lớp Meta. 479 00:25:16,760 --> 00:25:21,490 >> Vì vậy, khi điều này thực sự được biên soạn thành một câu lệnh SQL, 480 00:25:21,490 --> 00:25:24,875 có vẻ như điều này khó chịu xuống ở đây, "Tạo bảng thẻ sinh viên số nguyên, 481 00:25:24,875 --> 00:25:26,020 " bất cứ điều gì. 482 00:25:26,020 --> 00:25:30,002 >> Và, tôi nghĩ rằng nó là ngắn hơn, truy vấn SQL này ngay tại đây, 483 00:25:30,002 --> 00:25:32,960 nhưng nếu bạn nhìn vào lớp học này ở đây bạn có thể thấy chính xác những gì đang xảy ra. 484 00:25:32,960 --> 00:25:36,116 Bạn có thể xem những gì các loại của các lĩnh vực có, những gì họ đang được gọi là, 485 00:25:36,116 --> 00:25:38,115 và như vậy, tôi nghĩ rằng nhìn vào mã Python này 486 00:25:38,115 --> 00:25:43,340 là rất nhiều độc giả tìm đọc hơn cố gắng để viết truy vấn SQL này. 487 00:25:43,340 --> 00:25:45,990 >> Vì vậy, để thực sự sử dụng cơ sở dữ liệu, 488 00:25:45,990 --> 00:25:48,470 chúng ta phải kết nối với nó trong Python. 489 00:25:48,470 --> 00:25:52,770 Vì vậy, tôi thường viết một chức năng gọi là initialize_db rằng không có hai điều. 490 00:25:52,770 --> 00:25:54,880 Nó có trong cơ sở dữ liệu đối tượng db và nó 491 00:25:54,880 --> 00:25:58,360 kết nối đến nó, mà chỉ mở lên phần cơ sở dữ liệu. 492 00:25:58,360 --> 00:26:00,860 Nếu bạn chỉ cần chạy mặc dù trang web trên máy tính địa phương của bạn, 493 00:26:00,860 --> 00:26:04,320 nó không phải là một việc siêu lớn lo lắng về kết nối và ngắt kết nối, 494 00:26:04,320 --> 00:26:06,885 nhưng nếu bạn đang chạy nó trên một trang web, bạn 495 00:26:06,885 --> 00:26:10,010 muốn chắc chắn rằng, bất cứ khi nào người dùng kết nối đến nó, khi họ đóng 496 00:26:10,010 --> 00:26:12,270 các trang web, họ ngắt kết nối để bạn không có một bó của những người kết nối 497 00:26:12,270 --> 00:26:14,480 cơ sở dữ liệu của bạn cùng một lúc. 498 00:26:14,480 --> 00:26:16,370 >> Và sau đó, khi bạn kết nối với cơ sở dữ liệu, 499 00:26:16,370 --> 00:26:20,832 bạn muốn gọi db.create_tables, và danh sách các mô hình cho những gì bạn muốn 500 00:26:20,832 --> 00:26:21,540 để tạo bảng. 501 00:26:21,540 --> 00:26:23,950 Vì vậy, ở đây, tôi chỉ muốn tạo ra nó cho học sinh này. 502 00:26:23,950 --> 00:26:28,070 Và sau đó, những gì quan trọng, là định an toàn = True hầu hết thời gian. 503 00:26:28,070 --> 00:26:30,380 Vì vậy, những gì tuyên bố này sẽ làm gì, là nó 504 00:26:30,380 --> 00:26:33,580 tạo bảng biểu cho mô hình học sinh, nhưng chỉ 505 00:26:33,580 --> 00:26:36,109 nếu bảng có không được tạo ra rồi. 506 00:26:36,109 --> 00:26:37,400 Đó là những gì các quy định cụ thể an toàn. 507 00:26:37,400 --> 00:26:39,150 Vì vậy, nó sẽ không ghi đè lên bảng hiện tại của bạn, 508 00:26:39,150 --> 00:26:41,525 nó sẽ chỉ tạo ra một mới bàn nếu không có ai ở đó. 509 00:26:41,525 --> 00:26:45,090 Vì vậy, bạn chỉ có thể tạo ra các bảng một lần sử dụng SQL. 510 00:26:45,090 --> 00:26:49,410 Và sau đó có mà ngồi cơ sở dữ liệu ở đó, và sau đó kết nối với nhau thời gian, 511 00:26:49,410 --> 00:26:52,450 nhưng nó thường là tốt đẹp chỉ để đặt trong cuộc gọi create_tables này, 512 00:26:52,450 --> 00:26:55,550 do đó, nếu bạn đã bao giờ xóa của bạn cơ sở dữ liệu khi bạn chạy web của bạn 513 00:26:55,550 --> 00:26:57,960 ứng dụng một lần nữa, nó sẽ tạo lại nó. 514 00:26:57,960 --> 00:27:00,730 >> Vì vậy, chỉ cần đảm bảo rằng an toàn được xác định là True, 515 00:27:00,730 --> 00:27:03,580 hoặc bạn sẽ tìm thấy dữ liệu của bạn chỉ nhận clobbered mỗi lần. 516 00:27:03,580 --> 00:27:06,380 Và sau đó, bạn chỉ có thể gọi initialize_db thành lập 517 00:27:06,380 --> 00:27:09,820 một kết nối, và tạo bảng nếu cần thiết. 518 00:27:09,820 --> 00:27:13,150 >> Vì vậy, điều phổ biến nhất mà bạn sẽ muốn làm, 519 00:27:13,150 --> 00:27:15,920 hoặc một trong những điều phổ biến nhất, là để thực sự chèn thứ 520 00:27:15,920 --> 00:27:17,170 vào cơ sở dữ liệu của bạn. 521 00:27:17,170 --> 00:27:19,430 Và như vậy, thay vì phải để viết một chèn INTO 522 00:27:19,430 --> 00:27:21,990 tuyên bố với tất cả các các giá trị quy định, 523 00:27:21,990 --> 00:27:24,650 bạn thực sự có thể gọi chức năng trên lớp của học sinh. 524 00:27:24,650 --> 00:27:28,200 Vì vậy, khi bạn tạo một lớp mà kế thừa từ mô hình, 525 00:27:28,200 --> 00:27:30,200 nó có tạo ra phương pháp này. 526 00:27:30,200 --> 00:27:33,870 >> Vì vậy, bạn làm lớp name.create, và bạn chỉ định các thông số 527 00:27:33,870 --> 00:27:35,260 mà bạn muốn vượt qua trong. 528 00:27:35,260 --> 00:27:39,200 Vì vậy, nếu tôi muốn thêm một số sinh viên cho ví dụ cuốn sách lớp CS50 của chúng tôi, 529 00:27:39,200 --> 00:27:41,820 Tôi sẽ đưa David, người đã có một lớp rất tốt, ông đã có một 95. 530 00:27:41,820 --> 00:27:45,100 Và bản thân mình, những người không phải làm rất tốt trong CS50, tôi có một 50. 531 00:27:45,100 --> 00:27:47,600 Và như vậy, những điều tốt đẹp về những gì tạo ra điều này chức năng nào, 532 00:27:47,600 --> 00:27:53,040 là nó trả về một thể hiện, hoặc hàng, mà nó tạo ra trong bảng, 533 00:27:53,040 --> 00:27:55,750 và như vậy thì bạn lưu trữ trong một biến, và làm việc với nó sau này. 534 00:27:55,750 --> 00:27:58,830 Bạn có thể thay đổi xung quanh, mà Tôi sẽ đưa ra một ví dụ về. 535 00:27:58,830 --> 00:28:03,050 >> Chú ý rằng tôi đã không phải xác định ID, 536 00:28:03,050 --> 00:28:09,340 vì kể từ khi nó là PrimaryKeyField, nó sẽ tự động 537 00:28:09,340 --> 00:28:10,930 tăng nó nếu bạn không xác định nó. 538 00:28:10,930 --> 00:28:12,250 Và, trên thực tế, có thể bạn không nên xác định nó, 539 00:28:12,250 --> 00:28:14,810 bởi vì bạn có thể vô tình clobber ID của người khác. 540 00:28:14,810 --> 00:28:16,830 Và bạn muốn chắc chắc chắn rằng nó là duy nhất. 541 00:28:16,830 --> 00:28:20,662 >> Vì vậy, trên thực tế, hầu hết các điều phổ biến mà bạn muốn làm, 542 00:28:20,662 --> 00:28:22,620 có lẽ là chọn ra của cơ sở dữ liệu một khi bạn 543 00:28:22,620 --> 00:28:24,078 có rất nhiều thông tin trong đó. 544 00:28:24,078 --> 00:28:27,360 Và như vậy, nếu bạn muốn để có được tất cả mọi thứ, vì vậy tương đương với việc chọn sao 545 00:28:27,360 --> 00:28:30,940 từ sinh viên tuyên bố, nó sẽ chỉ được student.select. 546 00:28:30,940 --> 00:28:34,380 Và điều đó sẽ cho bạn trở lại một mảng với tất cả các sinh viên các đối tượng trong nó 547 00:28:34,380 --> 00:28:35,770 rằng bạn lặp qua bạn muốn. 548 00:28:35,770 --> 00:28:37,019 Bạn có thể nhận được những việc làm của nó. 549 00:28:37,019 --> 00:28:39,310 Và hầu hết thời gian, bạn không chỉ muốn làm lựa chọn, 550 00:28:39,310 --> 00:28:40,935 bạn thực sự muốn chỉ định một cái gì đó. 551 00:28:40,935 --> 00:28:44,580 Và như vậy, bạn có thể chuỗi cùng các cuộc gọi chức năng, 552 00:28:44,580 --> 00:28:48,830 giống như cách bạn làm chuỗi cùng các báo cáo trong SQL. 553 00:28:48,830 --> 00:28:53,002 Vì vậy, bạn có thể làm student.select (). Nơi trong ví dụ này. 554 00:28:53,002 --> 00:28:54,710 Và sau đó, bạn có thể cụ thể điều kiện, 555 00:28:54,710 --> 00:28:57,880 chỉ sử dụng Python bình thường Boolean để kiểm tra mọi thứ. 556 00:28:57,880 --> 00:29:02,110 >> Vì vậy, trong trường hợp này, bạn muốn hạn chế những gì bạn đang chọn để, 557 00:29:02,110 --> 00:29:06,790 nơi student.grade bằng 50, và student.name bằng Ezra, 558 00:29:06,790 --> 00:29:09,130 do đó sẽ chỉ làm cho tôi ra khỏi nó. 559 00:29:09,130 --> 00:29:11,340 Và hãy chú ý, ai thực sự điều tinh tế ở đây là 560 00:29:11,340 --> 00:29:15,570 rằng, nếu bạn muốn chỉ định một và / hoặc và một hoặc / hay, 561 00:29:15,570 --> 00:29:19,840 trong Python, bạn sẽ thường sử dụng, Tôi nghĩ rằng từ "và" thực sự, 562 00:29:19,840 --> 00:29:23,351 nhưng ở đây bạn sử dụng các ký hiệu duy nhất, thường là một nhà điều hành Bitwise, 563 00:29:23,351 --> 00:29:25,600 nhưng trong trường hợp đặc biệt này, chỉ cách các Peewee hiện nó, 564 00:29:25,600 --> 00:29:27,660 bạn sử dụng duy nhất ký hiệu để xác định "và". 565 00:29:27,660 --> 00:29:29,451 Đó là một cái gì đó Tôi có được hỗn hợp lên rất nhiều, 566 00:29:29,451 --> 00:29:32,530 nhưng nó không đi lên mà nhiều trong thực tế. 567 00:29:32,530 --> 00:29:36,350 >> Và sau đó, một khi bạn có tất cả các học sinh ra khỏi cơ sở dữ liệu, 568 00:29:36,350 --> 00:29:39,420 một khi bạn đã làm bạn chọn và mặc của bạn hoặc bất cứ điều gì, 569 00:29:39,420 --> 00:29:42,334 bạn có thể sử dụng một vòng lặp foreach, chỉ như bình thường trong Python, 570 00:29:42,334 --> 00:29:44,500 với bất kỳ loại iterator hoặc với bất kỳ loại của mảng. 571 00:29:44,500 --> 00:29:46,333 Vì vậy, bạn có thể làm, cho s trong student.select () whe. 572 00:29:46,333 --> 00:29:52,930 re (Student.grade <75), và do đó, điều này sẽ lặp qua mỗi học sinh trong bảng 573 00:29:52,930 --> 00:29:56,260 mà lớp ít hơn 75, trong trường hợp này, vẫn chỉ là tôi. 574 00:29:56,260 --> 00:29:59,218 Và sau đó bạn có thể làm một cái gì đó trong vòng loop rằng, giống như gửi cho tôi một email 575 00:29:59,218 --> 00:30:01,680 và cho tôi biết để thực sự biến trong Vấn đề của tôi Sets. 576 00:30:01,680 --> 00:30:04,550 >> Vì vậy, một điều bạn có thể làm, là nó thực sự dễ dàng 577 00:30:04,550 --> 00:30:06,460 để cập nhật các hàng trong bảng. 578 00:30:06,460 --> 00:30:08,720 Vì vậy, hãy nhớ lại ở đây, của bạn khi tôi đưa vào, 579 00:30:08,720 --> 00:30:11,440 Tôi lấy giá trị đó là trả về bởi student.create, 580 00:30:11,440 --> 00:30:14,920 và tôi giao nó cho tên gọi là Ezra. 581 00:30:14,920 --> 00:30:18,995 Và vì vậy bây giờ, bạn có thể thay đổi các giá trị trong trường hợp đó, 582 00:30:18,995 --> 00:30:20,870 giống như bạn làm một lớp học bình thường trong Python. 583 00:30:20,870 --> 00:30:25,060 >> Vì vậy, bạn có thể thiết lập ezra.grade = 95 và rằng sẽ cập nhật các bản sao địa phương, 584 00:30:25,060 --> 00:30:28,380 nhưng nếu bạn thực sự muốn cam kết thay đổi đó đến cơ sở dữ liệu, 585 00:30:28,380 --> 00:30:31,410 bạn phải gọi ezra.save, do đó, bạn gọi là phương pháp .save 586 00:30:31,410 --> 00:30:32,650 trên dụ. 587 00:30:32,650 --> 00:30:38,085 >> Và vì vậy bây giờ, tôi đã thay đổi thành công lớp riêng của tôi trong các cơ sở dữ liệu. 588 00:30:38,085 --> 00:30:41,210 Vì vậy, sau đó chúng ta hãy nói rằng tôi bị bắt thay đổi lớp của tôi trong các cơ sở dữ liệu. 589 00:30:41,210 --> 00:30:44,126 Giáo sư Malan có lẽ sẽ muốn xóa tôi ra khỏi lớp, 590 00:30:44,126 --> 00:30:48,630 và do đó bạn có thể gọi .delete phương pháp dụ chỉ về điều đó. 591 00:30:48,630 --> 00:30:51,674 >> Vì vậy, nếu bạn muốn đi trở lại vào vòng lặp này ở đây, 592 00:30:51,674 --> 00:30:53,465 và thực sự, thay vì gửi email tất cả 593 00:30:53,465 --> 00:30:56,577 của sinh viên mà lớp ít hơn 75, bạn muốn xóa chúng, 594 00:30:56,577 --> 00:30:58,660 trong vòng lặp này, bạn có thể gọi dụ s.delete. 595 00:30:58,660 --> 00:31:04,180 596 00:31:04,180 --> 00:31:07,780 Và điều cuối cùng bạn muốn làm, là bất cứ khi nào bạn thiết lập kết nối, 597 00:31:07,780 --> 00:31:10,350 và bạn đang thực hiện với công việc của bạn, bạn muốn gọi db.close, 598 00:31:10,350 --> 00:31:13,190 nơi db là cơ sở dữ liệu đối tượng mà chúng ta có trước. 599 00:31:13,190 --> 00:31:18,290 Và bạn muốn chắc chắn rằng mọi thứ sẽ được đóng cửa ra của. 600 00:31:18,290 --> 00:31:18,790 >> Mát. 601 00:31:18,790 --> 00:31:22,410 Vì vậy, bây giờ, tôi có một ứng dụng ví dụ. 602 00:31:22,410 --> 00:31:26,880 Tôi đã sắp xếp trước khi thực hiện tất cả mọi thứ chỉ do đó sẽ không có bất kỳ mã hóa trực tiếp 603 00:31:26,880 --> 00:31:30,220 những sai lầm, nhưng chúng ta có thể đi bộ qua nó và xem làm thế nào bạn sẽ đặt Flask 604 00:31:30,220 --> 00:31:33,685 và Peewee với nhau, và làm cho một ứng dụng đơn giản. 605 00:31:33,685 --> 00:31:38,680 Tôi gọi nó là CS50 rant, và nó sắp xếp của một nền tảng blog đơn giản. 606 00:31:38,680 --> 00:31:41,150 >> Vì vậy, lần đầu tiên, tôi sẽ chạy nó và hiển thị những gì nó trông giống như, 607 00:31:41,150 --> 00:31:42,890 và sau đó chúng ta có thể xem xét thêm vào các mã. 608 00:31:42,890 --> 00:32:00,470 609 00:32:00,470 --> 00:32:02,830 Được rồi, vậy chúng ta hãy chỉ chạy này. 610 00:32:02,830 --> 00:32:14,040 611 00:32:14,040 --> 00:32:17,250 Cool, tôi sẽ thực hiện điều này một chút nhỏ hơn. 612 00:32:17,250 --> 00:32:20,000 Nó không phải rất khá, chỉ vì Tôi đã không làm cho rất nhiều CSS, 613 00:32:20,000 --> 00:32:23,255 nhưng những gì nó là, nó có cơ sở dữ liệu này của bài đăng trên blog, 614 00:32:23,255 --> 00:32:25,630 và nó đi qua tất cả họ, và nó sẽ hiển thị chúng 615 00:32:25,630 --> 00:32:28,170 trên các trang theo thứ tự gần đây nhất. 616 00:32:28,170 --> 00:32:30,920 Và do đó, đây chỉ là một số bài viết mà tôi đã được lưu trong cơ sở dữ liệu. 617 00:32:30,920 --> 00:32:35,680 >> Vì vậy, nếu chúng ta muốn tạo ra một mới bài, chúng ta có thể đi đến Thêm một bài viết mới, 618 00:32:35,680 --> 00:32:42,720 và chúng tôi có thể nhập tiêu đề của bài, nên cái gì như, CS50 hội thảo. 619 00:32:42,720 --> 00:32:45,360 620 00:32:45,360 --> 00:32:46,735 Wow, thực sự thưởng thức các buổi hội thảo. 621 00:32:46,735 --> 00:32:51,070 622 00:32:51,070 --> 00:32:52,270 >> Mát. 623 00:32:52,270 --> 00:32:56,060 Sau đó, bạn nhấn môn, nó sẽ chuyển hướng bạn trở lại trang chủ, 624 00:32:56,060 --> 00:33:00,039 và sau đó bạn sẽ thấy rằng bài viết mới nhất đã được bổ sung. 625 00:33:00,039 --> 00:33:01,580 Và chúng tôi vẫn có tất cả những cái đó. 626 00:33:01,580 --> 00:33:08,080 Vì vậy, bây giờ, chúng ta hãy bước qua tất cả các mã và xem cách này được thực hiện. 627 00:33:08,080 --> 00:33:11,995 >> Vì vậy, tôi nghĩ rằng điều đầu tiên mà chúng ta hãy xem, thực sự là mô hình. 628 00:33:11,995 --> 00:33:14,120 Rất nhiều thời gian, khi bạn đang thiết kế một cái gì đó, 629 00:33:14,120 --> 00:33:17,036 bạn muốn suy nghĩ đầu tiên về cách bạn đang đi để đại diện cho dữ liệu của bạn, 630 00:33:17,036 --> 00:33:22,915 và sau đó thiết kế những thứ xung quanh đó, vì vậy mà tất cả mọi thứ có ý nghĩa. 631 00:33:22,915 --> 00:33:25,290 Và đó thực sự là như thế nào tôi đã làm nó khi tôi đã làm điều này, 632 00:33:25,290 --> 00:33:28,030 Tôi ngồi xuống và suy nghĩ, những gì tôi muốn trong một bài đăng. 633 00:33:28,030 --> 00:33:32,130 >> Vì vậy, ở đây, chúng ta có cùng một cấu trúc mà tôi đã đề cập trước đó, 634 00:33:32,130 --> 00:33:33,755 nơi chúng tôi làm db = Sqldatabase ('posts.db'). 635 00:33:33,755 --> 00:33:37,840 636 00:33:37,840 --> 00:33:40,980 Trong thực tế, có thể bạn không muốn mã cứng trong cơ sở dữ liệu tên của bạn. 637 00:33:40,980 --> 00:33:43,730 Điều đó có lẽ phải là một tham số đó là lưu trữ ở đâu, có lẽ 638 00:33:43,730 --> 00:33:45,940 trong một tập tin cấu hình, nhưng trong một ví dụ nhỏ như thế này, 639 00:33:45,940 --> 00:33:48,310 nó okay để mã cứng trong. 640 00:33:48,310 --> 00:33:53,510 >> Vì vậy, bây giờ, chúng tôi có lớp học bài này, mà kế thừa từ các mô hình cơ sở. 641 00:33:53,510 --> 00:33:56,930 Và nó có, một lần nữa, ID = PrimaryKeyField. 642 00:33:56,930 --> 00:34:02,250 Trên thực tế, nếu bạn không xác định, nếu tôi thực sự đã thoát khỏi điều này, 643 00:34:02,250 --> 00:34:07,152 sau đó Peewee chúng tôi sẽ chăm sóc tự động tạo mà trường ID, 644 00:34:07,152 --> 00:34:09,360 và nó sẽ tự động làm cho nó một PrimaryKey, mà 645 00:34:09,360 --> 00:34:12,485 Tôi nghĩ là thực sự tốt đẹp, bởi vì thông thường, đó là điều mà bạn muốn có, 646 00:34:12,485 --> 00:34:16,239 nhưng tôi muốn đặt nó vào cụ thể, chỉ để tôi nhớ rằng nó ở trong đó. 647 00:34:16,239 --> 00:34:19,480 Nhưng nếu bạn không xác định rằng, rằng sẽ có tự động. 648 00:34:19,480 --> 00:34:22,198 >> Vì vậy, sau đó, tôi có một ngày mà là một DateTimeField, và tất cả 649 00:34:22,198 --> 00:34:24,864 các lĩnh vực khác nhau, nếu bạn xem xét các tài liệu Peewee, 650 00:34:24,864 --> 00:34:28,920 nó sẽ cung cấp cho bạn một danh sách khác nhau kiểu của các trường mà bạn có thể sử dụng. 651 00:34:28,920 --> 00:34:34,440 Đối với hầu hết các phần, có sự tương những gì bạn sẽ thấy trong SQL. 652 00:34:34,440 --> 00:34:37,699 Vì vậy, có một CharField, một VarCharFields, textfields, 653 00:34:37,699 --> 00:34:40,550 mà là cho rất dài văn bản, giống như một bài viết trên blog 654 00:34:40,550 --> 00:34:44,460 tiềm năng, DateTimeFields, DoubleFields, FloatFields, 655 00:34:44,460 --> 00:34:46,100 tất cả những điều như thế. 656 00:34:46,100 --> 00:34:51,570 >> Và bạn có thể vượt qua trong lập luận khác với nó, mà tôi đã không chỉ định ở đây. 657 00:34:51,570 --> 00:34:55,719 Say, ví dụ, bạn không muốn cho phép hai bài viết có cùng tên, 658 00:34:55,719 --> 00:34:59,672 bạn có thể chỉ định một cái gì đó giống như độc đáo = True, 659 00:34:59,672 --> 00:35:02,880 và đó chỉ là một tham số phụ để lĩnh vực mà khi nó biên dịch nó xuống 660 00:35:02,880 --> 00:35:06,865 vào SQL, nó sẽ chỉ định rằng nó phải là duy nhất. 661 00:35:06,865 --> 00:35:09,740 Bạn cũng có thể chỉ định một cái gì đó như không null và tất cả những thứ khác 662 00:35:09,740 --> 00:35:11,750 bạn thường làm gì trong SQL. 663 00:35:11,750 --> 00:35:16,020 Vì vậy, đây là một khá đơn giản mô hình nào có ngày tháng. 664 00:35:16,020 --> 00:35:19,460 Chú ý ở đây, trong DateTimeField, Tôi đã chỉ định những gì mặc định là. 665 00:35:19,460 --> 00:35:22,560 Tôi chỉ định nó là datetime.datetime.now, 666 00:35:22,560 --> 00:35:24,920 vì cách mà điều này được đánh giá, 667 00:35:24,920 --> 00:35:28,750 nó thực sự đánh giá các DateTime.Now khi 668 00:35:28,750 --> 00:35:32,110 nó được chèn vào cơ sở dữ liệu. 669 00:35:32,110 --> 00:35:34,760 >> Tôi nghĩ rằng, tôi muốn có để kiểm tra này, 670 00:35:34,760 --> 00:35:38,222 nhưng nếu bạn đã làm một cái gì đó như thế này, sau đó nó thực sự sẽ đánh giá rằng một khi, 671 00:35:38,222 --> 00:35:40,180 và sau đó là DateTime sẽ luôn luôn như nhau. 672 00:35:40,180 --> 00:35:44,240 Vì vậy, chỉ cần nếu bạn đang làm gì đó với datetimes, kiểm tra lại 673 00:35:44,240 --> 00:35:47,080 mà nó đánh giá khi thực sự được đưa vào, hoặc người nào khác 674 00:35:47,080 --> 00:35:48,780 bạn có thể bị nhầm lẫn. 675 00:35:48,780 --> 00:35:51,221 >> Các danh hiệu chỉ là một CharField, trong đó có 676 00:35:51,221 --> 00:35:53,970 có nhiều thông số, bạn có thể vượt qua quy định cụ thể chính xác bao lâu bạn 677 00:35:53,970 --> 00:35:56,170 muốn nó được, nhưng ở đây, nó không thực sự quan trọng. 678 00:35:56,170 --> 00:35:58,687 Và văn bản là có được các văn bản của toàn bài, 679 00:35:58,687 --> 00:36:01,020 và đó sẽ là một TextField chỉ vì bạn muốn 680 00:36:01,020 --> 00:36:03,370 để cho phép nó là một chuỗi khá dài. 681 00:36:03,370 --> 00:36:05,970 >> Sau đó, chúng tôi có Meta này lớp con chỉ 682 00:36:05,970 --> 00:36:11,250 quy định cụ thể mà chúng tôi muốn các cơ sở dữ liệu nơi này là thực sự mở ra vào 683 00:36:11,250 --> 00:36:14,267 là đối tượng db mà chúng ta có ở đây. 684 00:36:14,267 --> 00:36:16,350 Và điều cuối cùng chúng ta có ở đây, chỉ là chức năng này 685 00:36:16,350 --> 00:36:18,120 rằng chúng ta sẽ sử dụng từ ứng dụng chính của chúng tôi 686 00:36:18,120 --> 00:36:23,970 để khởi tạo cơ sở dữ liệu để kết nối với nó, và sau đó tạo ra các bảng Post. 687 00:36:23,970 --> 00:36:26,880 >> Bây giờ, chúng ta hãy nhìn vào các ứng dụng chính bản thân. 688 00:36:26,880 --> 00:36:30,800 Vì vậy, đây là một trong khá chút còn hơn những người 689 00:36:30,800 --> 00:36:34,840 mà chúng ta đã thấy trước đây, nhưng hy vọng không quá xấu. 690 00:36:34,840 --> 00:36:37,140 Vì vậy, hãy để tôi mở rộng này ra. 691 00:36:37,140 --> 00:36:38,370 Đuợc. 692 00:36:38,370 --> 00:36:42,070 >> Vì vậy, hãy chú ý và đầu tôi nhập khẩu một bó toàn bộ những thứ khác 693 00:36:42,070 --> 00:36:44,129 từ Flask rằng chúng ta có không thực sự thấy trước đây. 694 00:36:44,129 --> 00:36:46,670 Và hy vọng, chúng ta có thể đi qua mỗi một trong số những cái một 695 00:36:46,670 --> 00:36:49,420 và nói thêm một chút về họ, được sắp xếp theo ví dụ. 696 00:36:49,420 --> 00:36:51,380 Vì vậy, chúng tôi có các Flask, và render_template, 697 00:36:51,380 --> 00:36:54,370 mà chúng ta đã thấy trước đây, yêu cầu đối tượng này, 698 00:36:54,370 --> 00:37:00,400 mà sẽ đi lên khi chúng ta nhìn vào như thế nào các hình thức mà tôi đã thấy thực sự 699 00:37:00,400 --> 00:37:01,170 công trinh. 700 00:37:01,170 --> 00:37:04,850 Chuyển hướng, cho phép bạn chuyển hướng trở lại từ Create New Post 701 00:37:04,850 --> 00:37:11,710 sao cho các trang web ban đầu, và sau đó URL, đó là một cái gì đó cho phép bạn 702 00:37:11,710 --> 00:37:15,550 tìm ra nơi trên trang web một trang cụ thể là. 703 00:37:15,550 --> 00:37:17,810 >> Vì vậy, sau đó, tiếp theo điều tôi làm, là tôi nhập khẩu 704 00:37:17,810 --> 00:37:21,550 tất cả các thông tin từ các mô hình các tập tin mà chúng tôi chỉ nhìn vào. 705 00:37:21,550 --> 00:37:23,140 Và, yeah. 706 00:37:23,140 --> 00:37:28,720 >> Vì vậy, cái gì khác mới mà đi lên khi bạn đang làm việc với, 707 00:37:28,720 --> 00:37:31,850 đặc biệt là cơ sở dữ liệu, là bạn có thể chỉ định 708 00:37:31,850 --> 00:37:35,110 một chức năng mà được gọi là trước mọi yêu cầu, và chức năng mà được 709 00:37:35,110 --> 00:37:39,690 gọi là sau mỗi yêu cầu, sử dụng này yêu cầu chức năng trang trí app.before. 710 00:37:39,690 --> 00:37:42,324 >> Và điều này sẽ được thực thi bất cứ nơi nào chức năng này. 711 00:37:42,324 --> 00:37:44,240 Điều này không phải là gọi là trước khi yêu cầu, 712 00:37:44,240 --> 00:37:46,281 nhưng thường đó là một cái gì đó hợp lý để gọi nó. 713 00:37:46,281 --> 00:37:48,580 714 00:37:48,580 --> 00:37:51,650 Bạn có thể chỉ định bất cứ chức năng bạn muốn để có được gọi là có, 715 00:37:51,650 --> 00:37:56,330 vì vậy tôi chỉ định initialize_db này chức năng mà chúng tôi đã trở lại trong các mô hình 716 00:37:56,330 --> 00:38:02,390 tập tin, vì vậy trước mỗi yêu cầu, bạn muốn kết nối tới cơ sở dữ liệu. 717 00:38:02,390 --> 00:38:04,560 >> Có hai khác nhau cách bạn có thể làm điều này. 718 00:38:04,560 --> 00:38:10,830 Bạn có thể làmapp., I tin rằng đó là after_request. 719 00:38:10,830 --> 00:38:13,800 Và sự khác biệt giữa after_request và teardown_request, 720 00:38:13,800 --> 00:38:17,590 là after_request sẽ chỉ xảy ra nếu yêu cầu thực sự là hợp lệ. 721 00:38:17,590 --> 00:38:20,440 Và như vậy, chỉ khi yêu cầu đã thành công, 722 00:38:20,440 --> 00:38:22,490 nếu không có gì sai, nhưng teardown_request 723 00:38:22,490 --> 00:38:26,300 xảy ra trong trường hợp của một thành công yêu cầu, hoặc trong trường hợp có lỗi. 724 00:38:26,300 --> 00:38:28,252 >> Vì vậy, thông thường, bạn muốn sử dụng teardown_request, 725 00:38:28,252 --> 00:38:30,460 trừ khi bạn muốn làm một cái gì đó, đặc biệt là khác nhau 726 00:38:30,460 --> 00:38:31,470 trong trường hợp có lỗi. 727 00:38:31,470 --> 00:38:35,122 Nhưng chỉ để đóng các cơ sở dữ liệu, cho dù đó là thành công hay nếu nó không thành công, 728 00:38:35,122 --> 00:38:37,080 chúng tôi làm bạn muốn ngắt kết nối từ các cơ sở dữ liệu. 729 00:38:37,080 --> 00:38:41,240 Vì vậy, nó được gọi là, db.close trên đối tượng db. 730 00:38:41,240 --> 00:38:43,740 >> Chú ý rằng các teardown_request mất trong một ngoại lệ. 731 00:38:43,740 --> 00:38:46,781 Vì vậy, bạn có thể kiểm tra xem có thực sự một lỗi khi nó đã được đóng cửa, 732 00:38:46,781 --> 00:38:49,390 nhưng ở đây, hy vọng, có không phải là một toàn bộ rất nhiều sai sót, 733 00:38:49,390 --> 00:38:52,720 vì vậy chúng ta chỉ cần loại bỏ qua mà. 734 00:38:52,720 --> 00:38:55,990 >> Được rồi, và phần còn lại của nó không phải là quá xấu. 735 00:38:55,990 --> 00:39:02,240 Vì vậy, khi chúng tôi đi đến trang chủ, chúng tôi trả lại Template home.html này 736 00:39:02,240 --> 00:39:03,490 mà sẽ mở ra. 737 00:39:03,490 --> 00:39:06,240 Quả là trong bài viết bằng, và điều này 738 00:39:06,240 --> 00:39:10,260 không được, nhớ là chúng tôi có bài viết này mô hình, vì vậy chúng tôi chọn tất cả các bài viết, 739 00:39:10,260 --> 00:39:13,890 và sau đó một điều bạn có thể làm, bạn có thể chỉ định các mệnh đề WHERE, 740 00:39:13,890 --> 00:39:16,910 bạn có thể chỉ định một đặt hàng bằng cách, và vì vậy chúng tôi 741 00:39:16,910 --> 00:39:18,820 tất cả các bài viết mà được chọn, và sau đó 742 00:39:18,820 --> 00:39:22,590 chúng ra lệnh cho họ bởi post.date.descending. 743 00:39:22,590 --> 00:39:25,030 Và điều đó sẽ chỉ định, khi họ thực sự đi ra, 744 00:39:25,030 --> 00:39:29,250 một trong những gần đây nhất sẽ là một đầu tiên. 745 00:39:29,250 --> 00:39:31,420 >> Và sau đó, chúng tôi đi qua đó vào các mẫu home.html, 746 00:39:31,420 --> 00:39:34,240 vì vậy chúng ta hãy thực sự mở ra rằng Template thực sự nhanh chóng, 747 00:39:34,240 --> 00:39:36,760 và hãy xem làm thế nào mà làm việc. 748 00:39:36,760 --> 00:39:42,130 Và đây không phải là HTML tuyệt vời, nhưng hy vọng, chúng ta có thể tập trung vào Python. 749 00:39:42,130 --> 00:39:46,960 >> Vì vậy, có một liên kết đến các Add New Post, và vì vậy điều này quy định các tuyến đường 750 00:39:46,960 --> 00:39:51,580 trong Flask rằng chúng tôi xác định, đó là quyền ở đây. 751 00:39:51,580 --> 00:39:56,310 Đây là con đường bài mới, và chúng tôi xác định rằng ở đây. 752 00:39:56,310 --> 00:40:00,450 Và đó là một liên kết mà sau đó sẽ đi cho rằng tuyến đường trong máy chủ Flask. 753 00:40:00,450 --> 00:40:03,820 >> Điều thú vị hơn là điều này cho vòng lặp ở đây. 754 00:40:03,820 --> 00:40:07,685 Vì vậy, chúng tôi xác định rằng điều này Tham số bài mà 755 00:40:07,685 --> 00:40:09,560 đã được thông qua vào chức năng render_template, 756 00:40:09,560 --> 00:40:13,550 cho mỗi bài viết trong bài viết của đối tượng mà được thông qua trong. 757 00:40:13,550 --> 00:40:16,600 Chúng tôi muốn in ra tiêu đề bài viết, trong H1, 758 00:40:16,600 --> 00:40:21,930 và sau đó dưới đây, chúng tôi muốn in ra các văn bản đăng bài trong một đoạn văn. 759 00:40:21,930 --> 00:40:25,710 >> Và ở đây, chúng ta có thể thực sự gọi một hàm Python, 760 00:40:25,710 --> 00:40:35,130 vì vậy chúng tôi có thể gọi strftime, ST-RF-thời gian, và bạn có thể vượt qua trong chuỗi định dạng 761 00:40:35,130 --> 00:40:37,064 mà bạn muốn in các dữ liệu ra vào. 762 00:40:37,064 --> 00:40:39,980 Vì vậy, nó là khá tốt đẹp mà bạn có thể thực sự gọi chức năng này Python 763 00:40:39,980 --> 00:40:41,090 từ bên trong ở đây. 764 00:40:41,090 --> 00:40:44,370 Bạn không cần phải làm các định dạng trên bên điều khiển, bởi vì thực sự, 765 00:40:44,370 --> 00:40:47,770 định dạng ngày tháng là một cái gì đó bạn muốn để đối phó trong các View. 766 00:40:47,770 --> 00:40:51,480 >> Và tất cả những phần trăm điều quan trọng không phải là siêu. 767 00:40:51,480 --> 00:40:55,270 Nếu bạn tìm kiếm các tài liệu hướng dẫn cho các chức năng strftime trong Python, 768 00:40:55,270 --> 00:40:57,040 nó xác định tất cả các thứ, nhưng mà của 769 00:40:57,040 --> 00:40:59,190 như thế nào, khi chúng tôi đang tìm kiếm tại trang chủ ở đây, 770 00:40:59,190 --> 00:41:04,440 nó định dạng này với một tốt đẹp ngày, và nó xác định AM hoặc PM, 771 00:41:04,440 --> 00:41:09,410 nhưng bình thường, nếu chúng tôi không có điều này ở đây, 772 00:41:09,410 --> 00:41:14,024 có thể bạn sẽ nhận được một số rác ngày mà không nhìn rất tốt. 773 00:41:14,024 --> 00:41:15,940 Và sau đó chúng tôi chỉ định post.text, và tôi có thể 774 00:41:15,940 --> 00:41:19,460 đã đặt một vài ngắt dòng ở đây, chỉ cần 775 00:41:19,460 --> 00:41:21,820 để đặt một số không gian giữa mỗi bài. 776 00:41:21,820 --> 00:41:26,270 >> Vì vậy, tôi nghĩ quan trọng nhất điều trong ví dụ này, 777 00:41:26,270 --> 00:41:28,697 là bạn có thể sử dụng cho vòng lặp. 778 00:41:28,697 --> 00:41:30,780 Và điều này là tương tự những điều bạn có thể làm trong PHP. 779 00:41:30,780 --> 00:41:32,905 Bạn có thể lặp qua, mọi thứ sẽ được thông qua tại, 780 00:41:32,905 --> 00:41:36,719 và như vậy, thay vì phải làm sao chép / dán, sao chép / dán tất cả các HTML, 781 00:41:36,719 --> 00:41:40,010 bạn chỉ cần phải viết nó một lần, và sau đó bạn có thể duyệt qua tất cả các bài viết. 782 00:41:40,010 --> 00:41:41,510 >> Và đây là một cái gì đó phổ biến mà bạn muốn 783 00:41:41,510 --> 00:41:44,510 để làm gì, khi bạn có rất nhiều dữ liệu, là cho tất cả mọi thứ trong dữ liệu của bạn, 784 00:41:44,510 --> 00:41:48,370 bạn muốn làm một điều tương tự. 785 00:41:48,370 --> 00:41:51,690 Và sau đó, chỉ cần nhớ rằng, khi bạn muốn in ra một cái gì đó một cách rõ ràng 786 00:41:51,690 --> 00:41:54,780 trong HTML, bạn sử dụng trong dấu ngoặc kép ở đây, 787 00:41:54,780 --> 00:41:57,820 nhưng sau đó khi bạn muốn chỉ định một số thông tin về điều kiện, 788 00:41:57,820 --> 00:42:02,430 hoặc về một vòng lặp for, bạn sử dụng khung phần trăm. 789 00:42:02,430 --> 00:42:08,730 >> Vì vậy, đi lại cho các Python mã, do đó giải thích 790 00:42:08,730 --> 00:42:12,242 những gì đang xảy ra trong chính tuyến đường, khi chúng tôi đến đó, 791 00:42:12,242 --> 00:42:14,450 nó chỉ hiển thị tất cả các bài viết, nhưng sau đó câu hỏi 792 00:42:14,450 --> 00:42:17,440 là, làm thế nào chúng ta thực sự có được gửi vào cơ sở dữ liệu, mà 793 00:42:17,440 --> 00:42:18,970 là thú vị hơn một chút. 794 00:42:18,970 --> 00:42:23,960 >> Vì vậy, khi bạn click vào New Post link, mà chúng tôi đã nhìn thấy ở đây, 795 00:42:23,960 --> 00:42:26,000 nó chuyển hướng bạn đến mẫu này. 796 00:42:26,000 --> 00:42:29,580 Và đó chỉ là một cuộc gọi đơn giản đến chức năng render_template, mà sau đó 797 00:42:29,580 --> 00:42:32,110 đi qua các bài viết mới ở dạng HTML. 798 00:42:32,110 --> 00:42:36,212 Vì vậy, chúng ta hãy nhìn vào đó. 799 00:42:36,212 --> 00:42:37,420 Vì vậy, một điều này là khá đơn giản. 800 00:42:37,420 --> 00:42:45,110 Nó có một form HTML đơn giản, sẽ xem xét một chút quen thuộc, 801 00:42:45,110 --> 00:42:47,380 dựa trên các hình thức trong CS50 Tài chính. 802 00:42:47,380 --> 00:42:49,940 Và như vậy, chúng tôi chỉ định ở đây, các hành động. 803 00:42:49,940 --> 00:42:52,435 Và ở đây, nếu bạn đang làm việc với PHP, bình thường, nó 804 00:42:52,435 --> 00:42:55,930 sẽ là một cái gì đó như thế, create.PHP, nhưng ở đây 805 00:42:55,930 --> 00:42:59,960 chúng tôi thực sự xác định một lộ trình trong máy chủ Flask. 806 00:42:59,960 --> 00:43:02,520 Và như vậy, tương ứng với tuyến đường này các tuyến đường tạo 807 00:43:02,520 --> 00:43:05,680 mà chúng ta có ở đây, mà chúng ta sẽ đi vào trong một giây. 808 00:43:05,680 --> 00:43:07,630 >> Và như vậy, chúng tôi xác định rằng đó là một phương pháp bài, 809 00:43:07,630 --> 00:43:09,820 bởi vì chúng tôi muốn gửi này form dữ liệu, và thường 810 00:43:09,820 --> 00:43:12,945 khi bạn đang gửi dữ liệu từ một hình thức, bạn có thể muốn sử dụng một yêu cầu bài, 811 00:43:12,945 --> 00:43:15,760 chỉ để bạn không kết thúc với lớn, khó sử dụng URL này. 812 00:43:15,760 --> 00:43:18,970 Nhưng bạn cũng có thể sử dụng một yêu cầu GET, và vượt qua nó với định tuyến biến, 813 00:43:18,970 --> 00:43:21,170 nhưng đối với các hình thức, nó là tốt đẹp một yêu cầu bài viết ở đây. 814 00:43:21,170 --> 00:43:24,620 Và như vậy thì, giống như bạn sẽ làm gì với HTML và PHP, 815 00:43:24,620 --> 00:43:28,420 bạn có thể chỉ định các yếu tố đầu vào văn bản, và bạn có thể chỉ định tên của họ, 816 00:43:28,420 --> 00:43:33,490 và đó là tên mà sẽ được thông qua vào đối tượng yêu cầu trong vòng Flask. 817 00:43:33,490 --> 00:43:36,960 >> Và sau đó, chúng tôi đã một Submit nút nói rằng bài viết. 818 00:43:36,960 --> 00:43:40,760 Và ở đây, bài viết là tên của nút, bởi vì đó là một bài đăng blog, 819 00:43:40,760 --> 00:43:42,700 nhưng ở đây, bài viết là phương pháp yêu cầu. 820 00:43:42,700 --> 00:43:47,060 Vì vậy, những người đang có cùng một từ nhưng thực sự không liên quan. 821 00:43:47,060 --> 00:43:48,460 Vâng 822 00:43:48,460 --> 00:43:54,800 >> Trở lại với các mã Python, khi chúng ta gọi là phương pháp tạo ra, 823 00:43:54,800 --> 00:43:57,702 ý ở đây là bạn có thể thực sự chỉ định trong các tuyến đường 824 00:43:57,702 --> 00:44:00,650 các phương pháp theo yêu cầu mà bạn muốn chấp nhận, 825 00:44:00,650 --> 00:44:04,770 và vì vậy ở đây, tôi xác định rằng tôi chỉ muốn chấp nhận một phương pháp Post. 826 00:44:04,770 --> 00:44:09,800 Vì vậy, nếu tôi thực sự cố gắng để truy cập vào trang trực tiếp, đó là sử dụng một yêu cầu GET, 827 00:44:09,800 --> 00:44:11,700 nó sẽ cho tôi biết "Phương pháp không cho phép." 828 00:44:11,700 --> 00:44:15,840 >> Và như vậy, bạn có các trang, loại giống như này tạo trang, mà tôi chỉ là 829 00:44:15,840 --> 00:44:20,192 thực sự sử dụng như là một cách cho các hình thức để gửi, 830 00:44:20,192 --> 00:44:22,900 bạn có thể chỉ định rằng bạn không muốn mọi người có thể đến đó 831 00:44:22,900 --> 00:44:25,650 trực tiếp thông qua một yêu cầu GET, hoặc nếu bạn không muốn, 832 00:44:25,650 --> 00:44:28,580 đối với một số lý do, một yêu cầu Post, bạn chỉ có thể chỉ định GET đây, 833 00:44:28,580 --> 00:44:32,720 nhưng trong ví dụ này, chúng ta chỉ muốn yêu cầu bài viết để đi ra ngoài. 834 00:44:32,720 --> 00:44:38,700 >> Vì vậy, khi create_post được gọi là, khi chúng tôi ghé thăm đó thông qua các yêu cầu Post, 835 00:44:38,700 --> 00:44:43,600 bất cứ khi nào bạn đi đến một cụ thể tuyến đường, có đối tượng yêu cầu này, 836 00:44:43,600 --> 00:44:46,640 và chúng ta phải nhập khẩu yêu cầu ở trên đỉnh, 837 00:44:46,640 --> 00:44:49,640 nhưng có yêu cầu này đối tượng mà được thông qua tại, 838 00:44:49,640 --> 00:44:53,210 và bạn có thể truy cập các dữ liệu mẫu, đó sẽ tự động được điền 839 00:44:53,210 --> 00:44:55,070 khi bạn gửi một yêu cầu từ một hình thức. 840 00:44:55,070 --> 00:44:56,990 >> Và sau đó, những gì tôi nghĩ là thực sự mát mẻ, được 841 00:44:56,990 --> 00:45:02,840 rằng các đối tượng hình thức để có được thông qua trong, chỉ là một từ điển Python 842 00:45:02,840 --> 00:45:10,560 chứa, nếu bạn access-- như vậy ở đây, chúng ta hãy tôi kéo lên HTML bên cạnh nó, chỉ 843 00:45:10,560 --> 00:45:17,670 vì vậy bạn có thể có mà như một tài liệu tham khảo, có, do đó 844 00:45:17,670 --> 00:45:21,060 các tên mà chúng tôi chỉ định ở đây cho các lĩnh vực khác nhau, vì vậy 845 00:45:21,060 --> 00:45:23,900 tiêu đề và văn bản, chúng tôi sau đó chỉ cần sử dụng những người trên đây 846 00:45:23,900 --> 00:45:27,110 như chỉ số sang các dữ liệu mẫu. 847 00:45:27,110 --> 00:45:28,950 Vì vậy, đó là siêu thuận tiện. 848 00:45:28,950 --> 00:45:33,320 >> Vì vậy, sau đó chúng ta gọi post.create, mà sẽ tạo ra và tự động chèn 849 00:45:33,320 --> 00:45:36,850 bài này đối tượng mới vào cơ sở dữ liệu. 850 00:45:36,850 --> 00:45:40,690 Và tôi nghĩ rằng điều này tạo ra chức năng đây là một ví dụ thực sự mát mẻ như thế nào 851 00:45:40,690 --> 00:45:44,900 mạnh mẽ Flask được và làm việc với điều này, bởi vì nếu bạn đang làm gì đó 852 00:45:44,900 --> 00:45:48,660 trong PHP, bạn có thể phải làm rất nhiều xác nhận, 853 00:45:48,660 --> 00:45:51,730 bạn sẽ phải sau đó thiết lập một kết nối cơ sở dữ liệu, 854 00:45:51,730 --> 00:45:55,210 bạn sẽ phải sau đó thực hiện truy vấn SQL, 855 00:45:55,210 --> 00:45:59,550 nhưng ở đây chúng tôi chỉ có này đẹp post.create, mà chúng tôi có thể sau đó chỉ 856 00:45:59,550 --> 00:46:01,520 có được các thông tin ra của các đối tượng yêu cầu, 857 00:46:01,520 --> 00:46:05,370 và sau đó vượt qua nó vào một mới đăng bài mà chúng tôi đang tạo. 858 00:46:05,370 --> 00:46:07,850 >> Và sau đó, cuối cùng Điều chúng tôi muốn làm, 859 00:46:07,850 --> 00:46:09,630 là để chuyển hướng người dùng trở lại nhà. 860 00:46:09,630 --> 00:46:13,020 Và vì vậy chúng tôi sử dụng này Flask chuyển hướng chức năng. 861 00:46:13,020 --> 00:46:17,770 Và cái gì mà chúng tôi đã không nhìn thấy trước, là chức năng URL này. 862 00:46:17,770 --> 00:46:21,970 Vì vậy, các URL cho chức năng cho phép bạn vượt qua trong thực sự là tên 863 00:46:21,970 --> 00:46:26,090 của một hàm trong mã Python của bạn, chứ không phải là các tuyến đường cụ thể 864 00:46:26,090 --> 00:46:26,720 rằng nó ở. 865 00:46:26,720 --> 00:46:32,107 >> Vì vậy, tôi có thể chỉ là một cách dễ dàng chuyển hướng người dùng để giảm, 866 00:46:32,107 --> 00:46:37,050 mà sẽ gửi nó trở về nhà, nhưng sử dụng các URL cho chức năng là tốt đẹp, 867 00:46:37,050 --> 00:46:39,990 bởi vì nếu bạn thay đổi vị trí nơi mà mọi thứ, 868 00:46:39,990 --> 00:46:44,080 vì vậy chúng ta hãy nói rằng tôi thay đổi nhà để ở / home thay vào đó, 869 00:46:44,080 --> 00:46:47,040 điều này sẽ vẫn còn sau đó trở về / home, vì thực sự đi và nhìn lên 870 00:46:47,040 --> 00:46:50,770 tên của các chức năng, và nó sẽ cung cấp cho bạn sao lưu các URL cho điều đó. 871 00:46:50,770 --> 00:46:52,490 >> Vì vậy, loại trên Giả định rằng bạn đang 872 00:46:52,490 --> 00:46:55,489 nhiều khả năng để thay đổi nơi mà mọi thứ là, so với tên của các chức năng. 873 00:46:55,489 --> 00:46:58,840 Bạn có thể sử dụng điều này thực sự URL đẹp cho hàm. 874 00:46:58,840 --> 00:47:02,470 Và một điều cần phải nhận thức được đó là một chút khó khăn, 875 00:47:02,470 --> 00:47:05,750 là bạn nghĩ rằng bạn chỉ có thể gọi chuyển hướng vào các URL cho, 876 00:47:05,750 --> 00:47:10,600 nhưng thực ra tất cả các tuyến đường có để lại một số loại văn bản và HTML, 877 00:47:10,600 --> 00:47:14,360 do đó, bạn thực sự phải trở lại cuộc gọi chuyển hướng. 878 00:47:14,360 --> 00:47:18,379 Nếu không, bạn sẽ nhận được một cái gì đó không hợp lệ về việc không trả lại một chuỗi, 879 00:47:18,379 --> 00:47:21,420 bởi vì tất cả trong số này có quay trở lại HTML mà bạn thực sự muốn làm. 880 00:47:21,420 --> 00:47:26,980 >> Và như vậy, khi bạn gọi chuyển hướng, nó chuyển hướng bạn đến trang, 881 00:47:26,980 --> 00:47:30,270 nhưng nó thực sự trả về HTML bạn cần phải thực hiện chuyển hướng đó. 882 00:47:30,270 --> 00:47:34,430 883 00:47:34,430 --> 00:47:37,110 Quay trở lại trang chủ. 884 00:47:37,110 --> 00:47:39,200 Vì vậy, chúng tôi có hai quan điểm khác nhau. 885 00:47:39,200 --> 00:47:40,132 Chúng tôi có quan điểm về nhà. 886 00:47:40,132 --> 00:47:41,590 Hoặc, tôi đoán tôi nên nói mẫu. 887 00:47:41,590 --> 00:47:44,190 Chúng tôi có hai mẫu này, mẫu nhà mà 888 00:47:44,190 --> 00:47:48,500 hiển thị tất cả các bài viết của chúng tôi, và sau đó chúng tôi có điều quảng cáo này, 889 00:47:48,500 --> 00:47:52,970 và khi bạn nhấp vào bài viết, nó đi vào một tuyến đường mới trong Flask, 890 00:47:52,970 --> 00:47:55,920 nhưng con đường đó không nhất thiết phải có một mẫu tương ứng. 891 00:47:55,920 --> 00:47:59,290 892 00:47:59,290 --> 00:48:01,560 Bạn không cần phải để xem bất cứ điều gì, nhưng bạn vẫn có thể 893 00:48:01,560 --> 00:48:04,090 có công việc này đi đằng sau hậu trường. 894 00:48:04,090 --> 00:48:07,450 Và sau đó bạn có được chuyển sao vào trang chủ. 895 00:48:07,450 --> 00:48:12,230 Và chắc chắn, thật dễ dàng để làm việc trong một số CSS đẹp hơn vào các mẫu 896 00:48:12,230 --> 00:48:15,580 và thực hiện điều này trông đẹp hơn rất nhiều, nhưng tất cả các logic chính 897 00:48:15,580 --> 00:48:18,590 là có trong Python. 898 00:48:18,590 --> 00:48:20,020 >> Bất kỳ câu hỏi về ví dụ đó? 899 00:48:20,020 --> 00:48:22,760 Tôi biết có rất nhiều những điều khác nhau xảy ra ở đó, 900 00:48:22,760 --> 00:48:25,341 rất nhiều điều chúng ta chưa từng thấy trước, nhưng cũng giống như bất cứ điều gì. 901 00:48:25,341 --> 00:48:25,840 Yeah. 902 00:48:25,840 --> 00:48:28,346 >> Đung 1: Bạn phải làm bất cứ điều gì đặc biệt để chà các dữ liệu đó là 903 00:48:28,346 --> 00:48:29,600 đến từ các hình thức? 904 00:48:29,600 --> 00:48:31,109 Tôi nhận thấy bạn chỉ cần nói "tạo ra" 905 00:48:31,109 --> 00:48:33,900 Ezra ZIGMOND: Yeah, vì vậy đó là trên thực tế, đó là một điểm thực sự tốt. 906 00:48:33,900 --> 00:48:36,350 Vì vậy, câu hỏi là, làm bạn cần phải kiểm tra và đảm bảo 907 00:48:36,350 --> 00:48:39,190 rằng các dữ liệu có giá trị, và làm bất kỳ loại chà 908 00:48:39,190 --> 00:48:41,840 để đảm bảo rằng nó là hợp lệ, bởi vì khi bạn có thể thấy ở đây, 909 00:48:41,840 --> 00:48:42,660 Tôi không làm điều đó. 910 00:48:42,660 --> 00:48:48,140 Vì vậy, chúng ta hãy xem những gì sẽ xảy ra nếu tôi gửi một cái gì đó trống. 911 00:48:48,140 --> 00:48:51,190 Vì vậy, nó thực sự sẽ chỉ làm cho một bài trống và điền vào các DateTime. 912 00:48:51,190 --> 00:48:55,990 >> Vì vậy, trong thực tế, bạn có lẽ sẽ muốn làm một cái gì đó như thế, 913 00:48:55,990 --> 00:49:04,749 có thể xác định nếu tiêu đề bằng các chuỗi rỗng, sau đó không làm điều này. 914 00:49:04,749 --> 00:49:07,290 Hoặc, chỉ làm điều đó nếu tiêu đề là không bằng chuỗi rỗng. 915 00:49:07,290 --> 00:49:10,330 Vì vậy, nó không thực sự tự động chăm sóc chà là 916 00:49:10,330 --> 00:49:12,820 cho bạn, vì vậy bạn vẫn cần phải làm điều đó. 917 00:49:12,820 --> 00:49:14,330 Vâng, câu hỏi hay. 918 00:49:14,330 --> 00:49:18,497 >> Đung 2: Liệu nó chà tiêm phần tiếp theo? 919 00:49:18,497 --> 00:49:19,890 Bạn có biết? 920 00:49:19,890 --> 00:49:22,830 >> Ezra ZIGMOND: Hy vọng rằng, Peewee nào đó. 921 00:49:22,830 --> 00:49:25,830 Tôi nghĩ chắc chắn nó sẽ là một khá thư viện xấu nếu nó đã không làm điều đó. 922 00:49:25,830 --> 00:49:29,511 923 00:49:29,511 --> 00:49:32,690 Tôi không biết chính xác. 924 00:49:32,690 --> 00:49:34,820 Tôi sẽ phải nhìn vào truy vấn mà nó tạo ra. 925 00:49:34,820 --> 00:49:38,980 Tôi nghĩ rằng, nếu tôi gõ trong một bài viết trên blog rằng loại nhìn 926 00:49:38,980 --> 00:49:46,370 giống như một cuộc tấn công SQL injection, một cái gì đó như thế này, nếu điều này 927 00:49:46,370 --> 00:49:49,370 giống như một lĩnh vực mật khẩu hoặc một cái gì đó, bạn có thể làm một cái gì đó như thế này. 928 00:49:49,370 --> 00:49:53,410 >> Tôi nghĩ rằng sẽ vẫn còn có nghĩa là đăng, 929 00:49:53,410 --> 00:49:59,200 nhưng tôi nghĩ rằng Peewee không làm một số loại cọ của dữ liệu 930 00:49:59,200 --> 00:50:01,680 trước khi nó thực sự thực hiện nó. 931 00:50:01,680 --> 00:50:04,510 >> Đung 1: Đó là lĩnh vực văn bản thiết kế để lấy văn bản đơn giản, phải không? 932 00:50:04,510 --> 00:50:05,710 >> Ezra ZIGMOND: Vâng, đúng vậy. 933 00:50:05,710 --> 00:50:06,465 Yeah. 934 00:50:06,465 --> 00:50:09,590 Vì vậy, tôi nghĩ rằng tất cả các, vì vậy đây là hành vi đúng, mà sẽ làm điều đó, 935 00:50:09,590 --> 00:50:12,170 nhưng tôi nghĩ rằng Peewee hy vọng không làm 936 00:50:12,170 --> 00:50:13,780 một số loại bảo vệ vào cuối cùng của họ. 937 00:50:13,780 --> 00:50:16,090 Và nếu bạn muốn kiểm tra xem hai, có 938 00:50:16,090 --> 00:50:19,530 nhiều cách khi bạn tạo ra một truy vấn. 939 00:50:19,530 --> 00:50:22,622 vì vậy bạn không cần phải thực hiện nó trực tiếp. 940 00:50:22,622 --> 00:50:24,330 Tôi sẽ phải mất một nhìn vào tài liệu hướng dẫn, 941 00:50:24,330 --> 00:50:27,930 nhưng bạn thực sự có thể xem SQL mà nó được tạo ra, 942 00:50:27,930 --> 00:50:30,840 và hãy nhìn vào đó, và làm cho chắc chắn rằng nó được thoát khỏi mọi thứ. 943 00:50:30,840 --> 00:50:33,700 >> Một lý do khác có lẽ bạn muốn nhìn vào SQL 944 00:50:33,700 --> 00:50:37,920 Peewee được xuất ra, là nếu thứ dường như được đi thật chậm, 945 00:50:37,920 --> 00:50:41,090 bạn có thể có một cái nhìn và xem những gì nó thực sự làm, vì nó đôi khi 946 00:50:41,090 --> 00:50:44,670 dễ vô tình thêm trong, cách bạn viết nó, 947 00:50:44,670 --> 00:50:47,880 bạn có thể vô tình có nó chọn toàn bộ cơ sở dữ liệu đầu tiên, 948 00:50:47,880 --> 00:50:50,230 và sau đó làm một số hoạt động phân loại vào đó, khi bạn thực sự 949 00:50:50,230 --> 00:50:51,320 có nghĩa là để chọn một tập hợp con. 950 00:50:51,320 --> 00:50:53,560 >> Và như vậy, nếu mọi thứ không khá đi bên phải, 951 00:50:53,560 --> 00:50:57,300 nó là tốt để có một cái nhìn theo yêu cầu đó là thực tế nhận được tạo ra. 952 00:50:57,300 --> 00:50:57,800 Yeah. 953 00:50:57,800 --> 00:51:02,100 >> Đung 2: Khi bạn lần đầu tiên bắt đầu, bạn đưa vào các cảng như 5000. 954 00:51:02,100 --> 00:51:02,904 >> Ezra ZIGMOND: Yeah. 955 00:51:02,904 --> 00:51:06,070 Đung 2: là mặc định với Peewee, hay là cái gì đó bạn có thể thay đổi? 956 00:51:06,070 --> 00:51:10,870 Ezra ZIGMOND: Có, vì vậy các cổng là mặc định với Flask. 957 00:51:10,870 --> 00:51:13,061 Nếu bạn chạy nó mà không xác định bất cứ điều gì, 958 00:51:13,061 --> 00:51:14,310 nó sẽ tự động làm điều đó. 959 00:51:14,310 --> 00:51:16,060 Tôi tin rằng, tôi muốn có để kiểm tra này, 960 00:51:16,060 --> 00:51:19,130 nhưng bạn có thể chỉ định rằng trong app.run, Tôi nghĩ rằng bạn có thể làm một cái gì đó như thế, 961 00:51:19,130 --> 00:51:19,629 port = 8080. 962 00:51:19,629 --> 00:51:22,375 963 00:51:22,375 --> 00:51:23,750 Hãy cung cấp cho rằng một thử thực sự nhanh chóng. 964 00:51:23,750 --> 00:51:29,100 965 00:51:29,100 --> 00:51:32,230 Yeah, vì vậy bạn chỉ có thể xác định port = 8080, và nó sẽ chạy nó ở đó, 966 00:51:32,230 --> 00:51:36,130 mà tôi nghĩ rằng, nếu bạn muốn chạy nó trên IDE, tôi đã không cố gắng này ra, 967 00:51:36,130 --> 00:51:38,527 nhưng tôi nghĩ rằng nếu bạn chạy nó trên cổng 8080, 968 00:51:38,527 --> 00:51:40,360 bạn có thể muốn được thể để truy cập vào máy chủ, 969 00:51:40,360 --> 00:51:41,870 giống như bạn đã cho trang web. 970 00:51:41,870 --> 00:51:44,390 >> Yeah, nhưng nó dễ dàng để thay đổi điều đó nếu bạn 971 00:51:44,390 --> 00:51:48,540 có bất kỳ loại như port-forwarding những điều mà bạn cần phải làm. 972 00:51:48,540 --> 00:51:50,410 >> Bất kỳ câu hỏi khác? 973 00:51:50,410 --> 00:51:50,916 Yeah? 974 00:51:50,916 --> 00:51:53,416 Đung 1: Vì vậy, tôi đã thấy trong bạn các mô hình, như bạn đã đề cập, 975 00:51:53,416 --> 00:51:55,647 bạn phải xác định cơ sở dữ liệu cho từng đối tượng. 976 00:51:55,647 --> 00:51:58,105 Bạn có xảy ra cho biết, hiện mà làm cho nó thực sự dễ dàng nếu bạn 977 00:51:58,105 --> 00:52:03,210 có rất nhiều cơ sở dữ liệu SQLite mà bạn muốn sử dụng cho một ứng dụng web duy nhất, 978 00:52:03,210 --> 00:52:07,210 mà bạn chỉ có thể chỉ định một bó của những người khác nhau trong mô hình của bạn? 979 00:52:07,210 --> 00:52:11,620 >> Ezra ZIGMOND: Vâng, hãy để tôi mở mà lên thật nhanh. 980 00:52:11,620 --> 00:52:17,570 Vì vậy, bạn đang nói, nếu bạn muốn có một bó của một cái gì đó khác nhau, có thể 981 00:52:17,570 --> 00:52:22,670 thích và các sinh viên, đối với một số Lý do, một cái gì đó như thế? 982 00:52:22,670 --> 00:52:26,870 Yeah, vì vậy tôi nghĩ rằng bạn vẫn còn, mỗi mô hình 983 00:52:26,870 --> 00:52:30,652 sẽ phải vẫn có chỉ một cơ sở dữ liệu được gán cho nó, 984 00:52:30,652 --> 00:52:32,610 nhưng nếu bạn muốn có mô hình khác nhau mà 985 00:52:32,610 --> 00:52:35,818 đã đối tượng cơ sở dữ liệu khác nhau được giao với nó, bạn chắc chắn có thể làm điều đó. 986 00:52:35,818 --> 00:52:43,070 Vì vậy, nếu tôi tạo ra một mới, một cái gì đó như thế này, 987 00:52:43,070 --> 00:52:47,000 và giờ đây là một sinh viên mà trông kỳ quặc như một bài đăng blog, 988 00:52:47,000 --> 00:52:49,390 Tôi có thể xác định rằng các cơ sở dữ liệu bằng db_2 đây. 989 00:52:49,390 --> 00:52:51,390 Vì vậy, tôi nghĩ rằng đó là Cách chính bạn có thể làm điều đó. 990 00:52:51,390 --> 00:52:54,560 991 00:52:54,560 --> 00:52:56,200 >> Mát. 992 00:52:56,200 --> 00:52:58,410 Bất kỳ câu hỏi khác? 993 00:52:58,410 --> 00:53:02,170 >> Vì vậy, chỉ để kết thúc lên một chút bit, đây là một số tài nguyên, 994 00:53:02,170 --> 00:53:06,030 và các slide sẽ được đăng trực tuyến vì vậy bạn có thể thực sự có được những liên kết này. 995 00:53:06,030 --> 00:53:08,500 Các nguồn lực tốt nhất là thực sự tài liệu cho Flask 996 00:53:08,500 --> 00:53:09,930 và Peewee mình. 997 00:53:09,930 --> 00:53:12,940 Họ đang viết thực sự tốt, tôi nghĩ. 998 00:53:12,940 --> 00:53:18,180 Vì vậy, các trang web Flask là ở đây, và họ có một quickstart hướng dẫn, 999 00:53:18,180 --> 00:53:20,710 sẽ đi qua tương tự điều gì, tôi bước qua, 1000 00:53:20,710 --> 00:53:23,560 nhưng nếu bạn muốn bất kỳ loại xét trong những điều mà tôi đã đi qua, 1001 00:53:23,560 --> 00:53:26,200 hoặc bạn nghĩ rằng tôi đã giải thích một cái gì đó một cách khó hiểu, 1002 00:53:26,200 --> 00:53:28,390 họ sẽ có những ví dụ tương tự ở đó. 1003 00:53:28,390 --> 00:53:31,570 >> Peewee có tài liệu, và họ có một quickstart hướng dẫn 1004 00:53:31,570 --> 00:53:34,650 mà đi qua các thông số chính mà bạn muốn sử dụng. 1005 00:53:34,650 --> 00:53:38,900 Vì vậy, những điều tôi đã nói chuyện về với giá trị mặc định độc đáo và quy định cụ thể, 1006 00:53:38,900 --> 00:53:42,710 các loại khác nhau của các lĩnh vực mà bạn có thể sử dụng, tất cả những người sẽ ở đó. 1007 00:53:42,710 --> 00:53:44,690 >> Ngoài ra, nếu bạn có câu hỏi về Peewee, 1008 00:53:44,690 --> 00:53:47,530 và bạn gửi cho họ trên stackoverflow, anh chàng người làm Peewee thực 1009 00:53:47,530 --> 00:53:49,500 đi và trả lời những đôi. 1010 00:53:49,500 --> 00:53:53,200 Nếu bạn có một câu hỏi, hy vọng ông sẽ có thể trả lời nó, 1011 00:53:53,200 --> 00:53:54,867 bởi vì ông đã viết toàn bộ điều. 1012 00:53:54,867 --> 00:53:56,700 Tôi nghĩ rằng đó là tất cả mọi thứ Tôi muốn để trang trải. 1013 00:53:56,700 --> 00:53:58,930 Thanks for sắp ra. 1014 00:53:58,930 --> 00:54:02,688