1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:03,227 [RIPRODUZIONE DI BRANI MUSICALI] 3 00:00:03,227 --> 00:00:04,705 4 00:00:04,705 --> 00:00:05,830 EZRA Zigmond: Hi, everyone. 5 00:00:05,830 --> 00:00:08,020 Grazie per essere venuti oggi. 6 00:00:08,020 --> 00:00:10,660 Questo seminario è "Python Web Apps con la boccetta. " 7 00:00:10,660 --> 00:00:14,510 >> Così, ho intenzione di parlare un po 'sul perché 8 00:00:14,510 --> 00:00:17,400 si potrebbe desiderare di utilizzare Flask fare applicazioni web con Python, in contrapposizione 9 00:00:17,400 --> 00:00:21,556 ad alcuni altri quadri là fuori, come Django, che è il più noto. 10 00:00:21,556 --> 00:00:24,330 Il sottotitolo è "e Peewee ", che è qualcosa 11 00:00:24,330 --> 00:00:27,250 stiamo andando a parlare di come di interagire con i database SQL. 12 00:00:27,250 --> 00:00:29,610 Lo rende davvero bello. 13 00:00:29,610 --> 00:00:32,390 >> Così, qui è solo un breve riassunto di ciò che voglio andare oltre. 14 00:00:32,390 --> 00:00:35,520 Quindi, in primo luogo, solo una diapositiva che sta per essere quickstart, 15 00:00:35,520 --> 00:00:38,530 che è come ottenere tutto impostato sul vostro computer. 16 00:00:38,530 --> 00:00:41,760 Ho intenzione di essere la dimostrazione questo sulla mia macchina Mac locali, 17 00:00:41,760 --> 00:00:45,220 proprio perché è lì che ho fatto questo prima, sono più comodo con esso, 18 00:00:45,220 --> 00:00:48,510 ma questo è sicuramente possibile sulla CD50 IDE. 19 00:00:48,510 --> 00:00:52,050 >> Così, dopo che, voglio introduce ciò che è Flask, 20 00:00:52,050 --> 00:00:55,089 e convincere perché si dovrebbe usarlo in primo luogo. 21 00:00:55,089 --> 00:00:56,880 Poi, io darò una rapida esempio di ciò che 22 00:00:56,880 --> 00:01:00,550 può fare in Flask, un esempio veloce di ciò che si può fare in peewee, 23 00:01:00,550 --> 00:01:05,010 e poi vi mostrerò più applicazione esempio completo 24 00:01:05,010 --> 00:01:07,520 che ho messo insieme che noi può camminare attraverso insieme. 25 00:01:07,520 --> 00:01:10,040 >> E infine, in l'ultima diapositiva, ho 26 00:01:10,040 --> 00:01:12,730 alcune risorse che si guarda in linea per ulteriori informazioni. 27 00:01:12,730 --> 00:01:15,560 Questo non è un completo tutorial come utilizzare Flask. 28 00:01:15,560 --> 00:01:18,140 E io spero di lasciare po 'di tempo per le domande. 29 00:01:18,140 --> 00:01:21,050 Chiunque guardando a livello locale, solo come, gridare in mezzo 30 00:01:21,050 --> 00:01:22,340 se hai qualche domanda. 31 00:01:22,340 --> 00:01:27,150 >> Così roba installazione rapida, se si vuole seguire, 32 00:01:27,150 --> 00:01:29,240 o se si desidera ottenere questo up sulla propria macchina, 33 00:01:29,240 --> 00:01:32,440 Ho intenzione di utilizzare Python 2.7.10. 34 00:01:32,440 --> 00:01:35,860 Boccetta funziona con Python 3, ma mi piace 35 00:01:35,860 --> 00:01:38,660 utilizzando Python 2, perché non c'è alcuni pacchetti Python che 36 00:01:38,660 --> 00:01:40,910 non funzionano con 3 ancora. 37 00:01:40,910 --> 00:01:44,800 Se avete installato pip, che è un gestore di pacchetti di Python, 38 00:01:44,800 --> 00:01:48,190 Penso che se il vostro Python è maggiore o uguale a 2.7.9, 39 00:01:48,190 --> 00:01:52,220 lo avete già installato, è super facile da installare questi pacchetti. 40 00:01:52,220 --> 00:01:54,990 >> Si può fare installare pip Flask, pip installare peewee, 41 00:01:54,990 --> 00:01:58,600 di solito è necessario eseguire sudo solo in modo che i permessi di lavoro fuori. 42 00:01:58,600 --> 00:02:01,080 E, se si utilizza un eccellente vecchia versione di Python, 43 00:02:01,080 --> 00:02:05,100 Mi consiglia di aggiornare il tuo Python, o utilizzando EasyInstall installare pip. 44 00:02:05,100 --> 00:02:09,180 45 00:02:09,180 --> 00:02:11,120 Così, la prossima domanda è, che cosa è Flask? 46 00:02:11,120 --> 00:02:13,280 E credo che, prima di un domanda ragionevole Mi chiedevo 47 00:02:13,280 --> 00:02:15,585 per un lungo periodo è, che cosa è una web app? 48 00:02:15,585 --> 00:02:17,960 Perché questo è una parola che mi pensiamo sia gettato in giro un sacco 49 00:02:17,960 --> 00:02:19,240 che io non lo so. 50 00:02:19,240 --> 00:02:22,340 E penso che il migliore esempio di ciò che una web app è, 51 00:02:22,340 --> 00:02:26,960 è davvero CS50 Finanza, dove in realtà non è solo un sito web, 52 00:02:26,960 --> 00:02:29,320 ma è qualcosa che si potrebbe sorta di interagire. 53 00:02:29,320 --> 00:02:31,736 Ci sono gli account utente e ogni sorta di cose diverse. 54 00:02:31,736 --> 00:02:35,010 Allora, dove esattamente si disegna il linea di demarcazione tra ciò che è un sito web, 55 00:02:35,010 --> 00:02:38,780 e ciò che è una web app, è una sorta di arbitraria, ma credo che l'idea, 56 00:02:38,780 --> 00:02:42,110 è qualcosa di più di un sito web ed è un utile applicazione. 57 00:02:42,110 --> 00:02:46,081 >> Così, Flask è un framework per rendendo applicazioni web utilizzando Python. 58 00:02:46,081 --> 00:02:48,330 E si spera, entro la fine di questo, voglio convincervi 59 00:02:48,330 --> 00:02:52,210 che si potrebbe effettivamente scrivere qualcosa come CS50 Finanza con Python, che ho 60 00:02:52,210 --> 00:02:53,950 come molto meglio di PHP, personalmente. 61 00:02:53,950 --> 00:02:57,320 >> Quindi, è Flask, che chiamano un microframework, con la quale, 62 00:02:57,320 --> 00:02:59,800 significano che è molto semplice, ma estensibile. 63 00:02:59,800 --> 00:03:02,980 Così, ha proprio quello che serve, ma se volete più funzionalità, 64 00:03:02,980 --> 00:03:04,522 è facile portarli in. 65 00:03:04,522 --> 00:03:06,480 Ma solo perché si tratta di un microframework, non fa 66 00:03:06,480 --> 00:03:08,960 vuol dire che è solo per i piccoli progetti. 67 00:03:08,960 --> 00:03:12,590 Ho un link qui che dice che Obama ha usato Flask nel 2012 68 00:03:12,590 --> 00:03:14,410 per la sua campagna sito web, che si spera, 69 00:03:14,410 --> 00:03:16,937 è qualcosa di un'approvazione. 70 00:03:16,937 --> 00:03:18,770 Ma la cosa che mi piace molto su Flask 71 00:03:18,770 --> 00:03:22,401 è che, in realtà non fa qualsiasi tipo di decisioni per voi. 72 00:03:22,401 --> 00:03:24,150 Proprio perché siamo parlando di applicazioni web, 73 00:03:24,150 --> 00:03:26,940 Devo confrontarlo con Ruby on Rails e Django, entrambi i quali 74 00:03:26,940 --> 00:03:30,450 sono grandi quadri, ma entrambi fanno supposizioni 75 00:03:30,450 --> 00:03:33,600 su come si desidera interagire con i database, 76 00:03:33,600 --> 00:03:36,900 come si desidera presentare il vostro vista, e sono sicuramente 77 00:03:36,900 --> 00:03:38,850 buoni aspetti che. 78 00:03:38,850 --> 00:03:41,490 >> Per esempio, Ruby on Rails ha questo sistema di registrazione attiva, 79 00:03:41,490 --> 00:03:43,100 che è davvero un bel modo di interagire con i dati, 80 00:03:43,100 --> 00:03:45,960 ma se si desidera utilizzare Ruby on Rails, che stai sorta di legati in quello. 81 00:03:45,960 --> 00:03:47,835 Ma con Flask, come io sarò mostrare con peewee, 82 00:03:47,835 --> 00:03:49,830 è possibile utilizzare qualsiasi tipo di database che si desidera, 83 00:03:49,830 --> 00:03:53,980 e si può solo tirare che a come estensione nella boccetta. 84 00:03:53,980 --> 00:03:56,350 >> Ecco, questo è il motivo per cui ho davvero come Flask, è che 85 00:03:56,350 --> 00:04:01,170 non fare ipotesi per voi sulla base di cose che non hai bisogno davvero. 86 00:04:01,170 --> 00:04:04,440 >> Quindi, perché si dovrebbe utilizzare Flask? 87 00:04:04,440 --> 00:04:08,230 I vantaggi sono, semplicemente ha davvero le caratteristiche principali 88 00:04:08,230 --> 00:04:09,420 costruito in lui di cui avete bisogno. 89 00:04:09,420 --> 00:04:11,980 Quindi, non dovete preoccuparvi di capire un sacco di cose 90 00:04:11,980 --> 00:04:13,175 che non si ha realmente bisogno. 91 00:04:13,175 --> 00:04:15,060 Non dovete avere a preoccuparsi su disattivando le funzioni 92 00:04:15,060 --> 00:04:16,620 che non si ha realmente bisogno. 93 00:04:16,620 --> 00:04:21,082 >> E, come ho detto, è super facile aggiungere a estensioni di cose 94 00:04:21,082 --> 00:04:21,790 che si ha bisogno. 95 00:04:21,790 --> 00:04:24,700 Alcuni di loro, ha Flask il proprio supporto per esso. 96 00:04:24,700 --> 00:04:28,230 Quindi c'è qualcosa chiamato Flask admin, che rispecchia quella amministratore 97 00:04:28,230 --> 00:04:32,060 pannello che Django fornisce, che ti dà un modo visivo piacevole 98 00:04:32,060 --> 00:04:33,405 per amministrare il vostro sito web. 99 00:04:33,405 --> 00:04:35,280 Ma ancora una volta, se siete fare qualcosa di semplice, 100 00:04:35,280 --> 00:04:39,550 probabilmente non è necessario un grande amministratore pannello, in modo penso che sia super bello. 101 00:04:39,550 --> 00:04:45,940 E gli svantaggi sono che si hanno meno potere, fuori dalla scatola. 102 00:04:45,940 --> 00:04:49,660 Così, quando si apre Flask, e nel vostro programma Python, 103 00:04:49,660 --> 00:04:53,150 basta digitare da Flask import *, o qualsiasi altra cosa, 104 00:04:53,150 --> 00:04:55,957 non esattamente ottengono tutti le caratteristiche che potrebbe desiderare. 105 00:04:55,957 --> 00:04:58,540 E quindi bisogna più esplicito elencare le caratteristiche desiderate. 106 00:04:58,540 --> 00:05:01,990 Ecco, questo è uno svantaggio, ma io ritengono che per la costruzione di piccole web 107 00:05:01,990 --> 00:05:04,782 applicazioni come sto andando a mostrare tu, che non è davvero un problema. 108 00:05:04,782 --> 00:05:07,281 E che l'ultima cosa che è dovrebbe dire, che è un errore di battitura, 109 00:05:07,281 --> 00:05:10,240 è che vi sono meno standardizzate convenzioni per come utilizzare Flask, 110 00:05:10,240 --> 00:05:12,400 semplicemente perché non ci sono tanti persone che lo utilizzano professionalmente 111 00:05:12,400 --> 00:05:13,191 rispetto al Django. 112 00:05:13,191 --> 00:05:16,380 Quindi, se si guarda qualcosa di simile, "come posso fare x" di Django, 113 00:05:16,380 --> 00:05:18,190 probabilmente lo troverete. 114 00:05:18,190 --> 00:05:20,260 >> C'è una buona progettazione modelli che è possibile utilizzare, 115 00:05:20,260 --> 00:05:22,660 ma con Flask, è sorta di seguire la propria strada, 116 00:05:22,660 --> 00:05:24,850 solo perché è un piuttosto piccola biblioteca. 117 00:05:24,850 --> 00:05:27,100 Così quelli sono il svantaggi, ma credo che 118 00:05:27,100 --> 00:05:29,370 che è ancora una buona biblioteca per l'uso. 119 00:05:29,370 --> 00:05:31,909 >> Così facciamo solo saltare a destra in boccetta. 120 00:05:31,909 --> 00:05:34,200 Questo è sicuramente non andare per essere un tutorial completo, 121 00:05:34,200 --> 00:05:37,480 ma è per darvi un'idea di come strutturare le cose, 122 00:05:37,480 --> 00:05:40,790 e così si sente comodo andare fuori e guardando la documentazione 123 00:05:40,790 --> 00:05:42,570 e scoprire di più. 124 00:05:42,570 --> 00:05:48,500 >> Quindi, mi apro un davvero semplice esempio all'inizio, 125 00:05:48,500 --> 00:05:50,737 e tu cosa che mostrerà sembra, e poi faremo 126 00:05:50,737 --> 00:05:52,070 scomposizione un po 'di più. 127 00:05:52,070 --> 00:05:56,160 >> Quindi questo qui, mi permetta di ottenere in esecuzione. 128 00:05:56,160 --> 00:06:06,800 129 00:06:06,800 --> 00:06:09,750 Così, ora ho la mia applicazione in esecuzione. 130 00:06:09,750 --> 00:06:15,910 Sto per aprire Safari, e su cui sta girando il mio host locale. 131 00:06:15,910 --> 00:06:19,360 Così sto solo andando a fare questo grande. 132 00:06:19,360 --> 00:06:23,960 Ma localhost: 5000 133 00:06:23,960 --> 00:06:27,650 >> E così, proprio ora, tutto questo fa è, quando si visita il sito, 134 00:06:27,650 --> 00:06:31,490 esso stampa "Ciao Flask," che non è super utile, 135 00:06:31,490 --> 00:06:34,630 ma penso che sia fresco che in questo piccolo file di qui, 136 00:06:34,630 --> 00:06:37,390 abbiamo un server Web che esegue che sta stampando qualcosa. 137 00:06:37,390 --> 00:06:40,500 Quindi, diamo un'occhiata in realtà il codice per un secondo, 138 00:06:40,500 --> 00:06:43,080 e scomposizione un po '. 139 00:06:43,080 --> 00:06:45,260 È la dimensione un bene per tutti qui? 140 00:06:45,260 --> 00:06:51,560 >> Così, si spera, si è un po ' agio con Python. 141 00:06:51,560 --> 00:06:55,820 Sto assumendo che possiamo guardare Python e leggere attraverso di essa. 142 00:06:55,820 --> 00:06:59,290 Se avete domande su niente, posso anche andare oltre questo. 143 00:06:59,290 --> 00:07:03,974 >> Quindi la prima riga è, da Flask, importiamo, Flask con un capitale "F" 144 00:07:03,974 --> 00:07:06,140 che è una specie di tutti i caratteristiche fondamentali di cui avete bisogno. 145 00:07:06,140 --> 00:07:08,890 Ogni volta che si sta scrivendo un file e usando Flask, 146 00:07:08,890 --> 00:07:12,120 si sta andando a voler importare che, solo perché che ha tutte le cose principali. 147 00:07:12,120 --> 00:07:15,400 La prossima cosa che facciamo, siamo noi chiamare questa funzione Flask, appena 148 00:07:15,400 --> 00:07:19,270 per creare un oggetto applicazione, e sei sempre andando a volerlo fare. 149 00:07:19,270 --> 00:07:25,960 >> E poi, saltando giù al fondo in fretta, questa parte è qui, 150 00:07:25,960 --> 00:07:28,760 'if_name _ == "_ main_"', che è una sorta di convenzione Python. 151 00:07:28,760 --> 00:07:32,750 Quindi questo sarà solo eseguito se si eseguire il file direttamente utilizzando Python. 152 00:07:32,750 --> 00:07:36,040 Poi, noi chiamiamo app.run, che sarà effettivamente iniziare l'applicazione in corso. 153 00:07:36,040 --> 00:07:39,570 >> Quindi, questa è la struttura principale che avrete in qualsiasi applicazione Flask, 154 00:07:39,570 --> 00:07:48,550 è si avrà questo app = Flask (_name_), e poi app.run. 155 00:07:48,550 --> 00:07:54,940 >> Così, le due cose che ho qui, siamo ciò che noi chiamiamo percorsi. 156 00:07:54,940 --> 00:07:57,150 Quindi, parliamo di instradamento un po 'di più. 157 00:07:57,150 --> 00:07:58,430 Tornerò alla diapositiva. 158 00:07:58,430 --> 00:08:02,540 >> Così il più fondamentale concetto di Flask è il routing. 159 00:08:02,540 --> 00:08:06,750 Ed è l'idea che si assegnare funzioni in Python 160 00:08:06,750 --> 00:08:11,280 agli indirizzi particolari sulla tua pagina web. 161 00:08:11,280 --> 00:08:13,930 Così, ogni volta che vuoi per creare un nuovo itinerario, 162 00:08:13,930 --> 00:08:16,500 si utilizza questo @ app.route funzione di decoratore. 163 00:08:16,500 --> 00:08:19,770 Quindi, se si ha familiarità con decoratori funzione in Python, 164 00:08:19,770 --> 00:08:24,160 è questo concetto che Consente la ripresa di una funzione 165 00:08:24,160 --> 00:08:26,800 e surround con qualcos'altro. 166 00:08:26,800 --> 00:08:30,140 >> Quindi, in realtà, ciò che questo decoratore fa, è che prende la funzione sotto di essa, 167 00:08:30,140 --> 00:08:33,409 e aggiunge ulteriori informazioni ad esso, ma quello che realmente Flask 168 00:08:33,409 --> 00:08:37,480 fa a realizzare questo non è super cruciale, ma ciò che è importante, 169 00:08:37,480 --> 00:08:43,640 è che prima del percorso, si mettere questo @ app.route, e poi 170 00:08:43,640 --> 00:08:46,480 l'indirizzo del percorso, quindi la barra è ciò che 171 00:08:46,480 --> 00:08:48,360 visto quando abbiamo appena apriamo la pagina web. 172 00:08:48,360 --> 00:08:49,580 Ecco, questo è il homepage. 173 00:08:49,580 --> 00:08:51,037 E 'solo il percorso barra. 174 00:08:51,037 --> 00:08:52,370 E allora avete questa funzione. 175 00:08:52,370 --> 00:08:54,453 Il nome della funzione può essere quello che vuoi. 176 00:08:54,453 --> 00:08:56,930 Essa non deve necessariamente hanno a che fare con il percorso. 177 00:08:56,930 --> 00:08:59,440 E poi, qualunque cosa ritorno della funzione, 178 00:08:59,440 --> 00:09:01,730 la funzione dovrebbe restituire una stringa. 179 00:09:01,730 --> 00:09:03,740 E tale stringa può contenere HTML o qualsiasi cosa, 180 00:09:03,740 --> 00:09:06,920 e che in realtà è quello che otterrà restituito al browser web come HTML, 181 00:09:06,920 --> 00:09:08,200 e renderà tale. 182 00:09:08,200 --> 00:09:12,030 >> Quindi questo è lo stesso codice che era dall'esempio 183 00:09:12,030 --> 00:09:16,430 che ho appena eseguito, così quando visitiamo barra, si chiama una funzione Ciao Mondo, che 184 00:09:16,430 --> 00:09:20,470 solo restituisce una stringa, Ciao Flask, e che viene stampato sullo schermo. 185 00:09:20,470 --> 00:09:27,290 >> Quindi c'è un altro esempio, che è, quando si visita / ciao, 186 00:09:27,290 --> 00:09:30,370 esso stampa Ciao Parola, che dovrebbe effettivamente dire, Ciao Mondo, 187 00:09:30,370 --> 00:09:32,010 ma facciamo finta che era intenzionale. 188 00:09:32,010 --> 00:09:35,140 Quindi cerchiamo di tirare che fino reale veloce. 189 00:09:35,140 --> 00:09:41,290 >> Quindi, se si va a localhost / ciao, sarà ora stampare qualcosa d'altro. 190 00:09:41,290 --> 00:09:45,680 Ecco, questo è solo un esempio veloce di come è possibile creare due percorsi diversi. 191 00:09:45,680 --> 00:09:50,630 >> Così, finora non è super utile, Non c'è un bel po 'che si può fare, 192 00:09:50,630 --> 00:09:55,360 si può solo fare tutto questo con aventi differenti pagine HTML, 193 00:09:55,360 --> 00:09:58,000 e quando si visita un particolare Pagina semplicemente carica la pagina. 194 00:09:58,000 --> 00:10:00,864 Quindi cerchiamo di vedere ancora un po ' cose utili che si possono fare. 195 00:10:00,864 --> 00:10:03,780 Quindi, una cosa che si potrebbe avere notato nell'esempio che ho tirato 196 00:10:03,780 --> 00:10:07,160 up, è che avevo app.run (debug = True). 197 00:10:07,160 --> 00:10:09,580 E così, ciò che questo argomento di debug fa, è 198 00:10:09,580 --> 00:10:14,600 che quando si esegue il server web, quando siete nella vostra applicazione, 199 00:10:14,600 --> 00:10:18,100 se si modifica un file, lo farà ricaricare automaticamente il server. 200 00:10:18,100 --> 00:10:21,160 >> E così che in realtà non è necessario riavvio Python, che è super utile. 201 00:10:21,160 --> 00:10:24,020 Posso dimostrare che. 202 00:10:24,020 --> 00:10:26,960 Permettetemi di tirare su il mio codice con l'errore di battitura in esso, 203 00:10:26,960 --> 00:10:30,420 e far finta che errore di battitura è stato messo lì intenzionalmente a fini istruttivi. 204 00:10:30,420 --> 00:10:31,625 Quindi aggiungiamo questo torna in. 205 00:10:31,625 --> 00:10:33,140 Così ora si dice Ciao Mondo. 206 00:10:33,140 --> 00:10:34,410 Io salvarlo. 207 00:10:34,410 --> 00:10:36,540 E se tiriamo indietro il terminale, ti 208 00:10:36,540 --> 00:10:39,520 dire che è il riavvio, perché rilevato un cambiamento, 209 00:10:39,520 --> 00:10:43,620 e così ora, quando ricarichiamo la pagina, si stamperà la cosa giusta. 210 00:10:43,620 --> 00:10:45,630 >> Così debug è super utile per questo. 211 00:10:45,630 --> 00:10:48,740 Inoltre, se avete qualunque sorta di incidente, così 212 00:10:48,740 --> 00:10:54,370 vorrei fare questo incidente applicazione avendo esso non restituisce una stringa. 213 00:10:54,370 --> 00:10:57,540 Quindi, facciamo solo averlo Nessuno tornare per qualche motivo. 214 00:10:57,540 --> 00:11:00,810 E poi, quando mi trovo a visitare questo pagina, sarà solo in crash, 215 00:11:00,810 --> 00:11:04,465 ma il server non solo in crash, è in realtà ti dà una posteriore super utile 216 00:11:04,465 --> 00:11:06,490 traccia di tutto ciò che è andato storto. 217 00:11:06,490 --> 00:11:10,050 E che cosa è veramente bello, è che in ogni passo in questa traccia posteriore, 218 00:11:10,050 --> 00:11:14,260 si potrebbe aprire un interattivo shell qui, e una sorta di stampare ciò che 219 00:11:14,260 --> 00:11:17,780 variabili si vuole dare un'occhiata a. 220 00:11:17,780 --> 00:11:21,054 >> E così debug è davvero utile per capire 221 00:11:21,054 --> 00:11:23,470 quello che sta succedendo con il tuo Server, piuttosto che vedere 222 00:11:23,470 --> 00:11:28,201 qualcosa in PHP come un 500 interna errore del server, che è super inutile. 223 00:11:28,201 --> 00:11:30,700 Una cosa da tenere presente, è che se si mette la vostra applicazione in linea 224 00:11:30,700 --> 00:11:34,260 quindi è visibile al pubblico, è non vuole lasciare la modalità di debug, 225 00:11:34,260 --> 00:11:37,320 perché la gente può effettivamente usare quella console che io 226 00:11:37,320 --> 00:11:39,150 ha mostrato di eseguire codice arbitrario. 227 00:11:39,150 --> 00:11:42,120 >> Così possono stampare come ogni codici segreti che avete in là, 228 00:11:42,120 --> 00:11:44,755 essi possono guardare esattamente come il vostro sito web è in funzione. 229 00:11:44,755 --> 00:11:46,630 Quindi è davvero utile per i test, ma sempre 230 00:11:46,630 --> 00:11:50,090 assicuratevi di prendere fuori prima si pubblica qualsiasi cosa online. 231 00:11:50,090 --> 00:11:56,640 >> Così, quando si sta utilizzando qualcosa come PHP, c'è questa idea 232 00:11:56,640 --> 00:11:58,920 che è possibile passare informazioni tra le pagine web 233 00:11:58,920 --> 00:12:03,620 mettendo le informazioni in realtà nella URL, che è una richiesta GET, 234 00:12:03,620 --> 00:12:07,490 ma a Flask, si può effettivamente fare qualcosa di un po 'come quella, 235 00:12:07,490 --> 00:12:10,590 avendo un percorso che ha una variabile come parte di esso. 236 00:12:10,590 --> 00:12:14,090 >> Quindi, se si guarda a questo esempio sullo schermo qui, 237 00:12:14,090 --> 00:12:19,930 abbiamo un percorso che è ('/ ciao /'), e quindi, se si visita 238 00:12:19,930 --> 00:12:23,790 / ciao / qualcosa, quel qualcosa sta per ottenere effettivamente pieno 239 00:12:23,790 --> 00:12:25,490 nella variabile nome. 240 00:12:25,490 --> 00:12:27,850 E notare che la funzione che viene fornito con quella rotta 241 00:12:27,850 --> 00:12:31,302 deve prendere nel parametro nome, in modo che sarà effettivamente 242 00:12:31,302 --> 00:12:32,510 avere superato nella funzione. 243 00:12:32,510 --> 00:12:34,190 >> E poi, una volta che sei all'interno di tale funzione, 244 00:12:34,190 --> 00:12:36,420 si può trattare che, come una variabile normale di Python, 245 00:12:36,420 --> 00:12:39,650 e così poi, lo farà stampare Ciao, ed è 246 00:12:39,650 --> 00:12:42,000 riempirà il nome utilizzando qualche formattazione di stringhe. 247 00:12:42,000 --> 00:12:48,060 >> Quindi, per aggiungere parti variabili di un percorso, si utilizza la marcatura parentesi angolare. 248 00:12:48,060 --> 00:12:51,220 E, facoltativamente, è possibile utilizzare quello che chiama un convertitore. 249 00:12:51,220 --> 00:12:56,840 E così, se si mette questo annotazioni con i due punti, 250 00:12:56,840 --> 00:13:00,015 è possibile specificare che si tratta di un int, o di un galleggiante, o percorso, 251 00:13:00,015 --> 00:13:01,640 e convertirà automaticamente. 252 00:13:01,640 --> 00:13:05,130 È anche possibile fare la conversione all'interno della funzione di Python, 253 00:13:05,130 --> 00:13:09,710 semplicemente utilizzando un cast, ma a volte se si vuole essere sicuri che si tratta di un int, 254 00:13:09,710 --> 00:13:12,080 si può mettere che regola di conversione in là. 255 00:13:12,080 --> 00:13:15,930 >> Quindi cerchiamo di tirare su un esempio di alcune regole variabili. 256 00:13:15,930 --> 00:13:21,480 Ecco, questo ha la stessa base struttura con l'importazione da Flask 257 00:13:21,480 --> 00:13:25,030 Flask, la app = Flask (_name_), e quindi è in esecuzione alla fine. 258 00:13:25,030 --> 00:13:28,050 Abbiamo questi due diversi percorsi variabili qui. 259 00:13:28,050 --> 00:13:29,900 E il primo, è quello che ho mostrato 260 00:13:29,900 --> 00:13:34,230 nella slitta, cioè che ci vuole solo un nome di stringa 261 00:13:34,230 --> 00:13:35,650 e stamperà Ciao, Nome. 262 00:13:35,650 --> 00:13:41,410 >> E poi, la seconda si usa la conversione. 263 00:13:41,410 --> 00:13:44,690 Quindi questo convertirà automaticamente a un int, e quindi raddoppiare il int, 264 00:13:44,690 --> 00:13:46,150 e stampare che fuori. 265 00:13:46,150 --> 00:13:48,220 E, non facciamo alcun tipo della conversione al suo interno 266 00:13:48,220 --> 00:13:49,594 perché Flask si occupa di questo. 267 00:13:49,594 --> 00:13:53,181 Quindi cerchiamo di ottenere questo correre. 268 00:13:53,181 --> 00:13:54,930 Quando si ha un Flask applicazione in esecuzione, 269 00:13:54,930 --> 00:13:58,440 È possibile controllare-C fuori di esso per arrestare il server in esecuzione. 270 00:13:58,440 --> 00:14:02,420 E poi io correrò le variabili. 271 00:14:02,420 --> 00:14:11,740 >> Così andiamo a localhost / ciao / Ezra e si spera, questo dirà ciao a me. 272 00:14:11,740 --> 00:14:14,530 273 00:14:14,530 --> 00:14:20,310 >> Così ha preso nel mio nome, nella variabile percorso, e riempì in qui. 274 00:14:20,310 --> 00:14:23,950 Così farò anche mostrare un rapido esempio del raddoppio. 275 00:14:23,950 --> 00:14:28,600 Quindi, se si va a / doppio / 3, si stamperà 6. 276 00:14:28,600 --> 00:14:31,440 Quindi questo è preso cura di la conversione per noi. 277 00:14:31,440 --> 00:14:34,190 >> Così si può anche farlo con galleggiante, e qualcosa di speciale, 278 00:14:34,190 --> 00:14:37,530 se è necessario specificare qualcosa di simile un percorso, che gli permette di accettare barre, 279 00:14:37,530 --> 00:14:39,155 ma che non dovrebbe normalmente essere un problema. 280 00:14:39,155 --> 00:14:41,480 281 00:14:41,480 --> 00:14:43,820 Finora abbiamo, ancora appena stato il ritorno 282 00:14:43,820 --> 00:14:46,320 stringhe, che non è molto interessante. 283 00:14:46,320 --> 00:14:48,730 >> Abbiamo potuto tornare stringa HTML letterale. 284 00:14:48,730 --> 00:14:54,322 Così nel codice possiamo inserire qualcosa come il b-tag per renderlo grassetto, 285 00:14:54,322 --> 00:14:56,030 ma la maggior parte del tempo si realtà non si vuole 286 00:14:56,030 --> 00:14:58,420 per essere la scrittura di codice HTML nel codice Python. 287 00:14:58,420 --> 00:15:01,940 Diventa davvero disordinato, e non è un buon momento. 288 00:15:01,940 --> 00:15:06,430 >> Flask permette di separare il HTML in quello che viene chiamato il modello, 289 00:15:06,430 --> 00:15:09,467 e quindi se stai pensando in termini di modello MVC 290 00:15:09,467 --> 00:15:11,550 che si ha familiarità con, si spera, dal lavoro 291 00:15:11,550 --> 00:15:15,520 con CS50 Finance un po ', si può pensare di file Python 292 00:15:15,520 --> 00:15:19,430 come più del controllore, dove stanno interagendo con qualunque 293 00:15:19,430 --> 00:15:20,970 modello di dati si possa avere. 294 00:15:20,970 --> 00:15:24,900 >> E poi stanno chiamando fuori al Visualizzazioni e passare le informazioni a quella vista 295 00:15:24,900 --> 00:15:28,120 a compilare le informazioni in HTML che ha bisogno. 296 00:15:28,120 --> 00:15:30,490 E ciò che chiamiamo quelle Visualizzazioni sono modelli in classe. 297 00:15:30,490 --> 00:15:35,280 >> Così Flask usa un altro Python modulo che lo farà automaticamente 298 00:15:35,280 --> 00:15:38,620 installare quando si installa PiP Flask chiamato Jinja, che 299 00:15:38,620 --> 00:15:40,885 consente di aggiungere questi annotazioni HTML 300 00:15:40,885 --> 00:15:45,140 che si vede sullo schermo, che permette si mettono in cose come condizionali, 301 00:15:45,140 --> 00:15:47,230 e loop nel codice HTML. 302 00:15:47,230 --> 00:15:51,140 >> Quindi sembra un po 'come come si potrebbe utilizzare PHP all'interno di un file HTML, 303 00:15:51,140 --> 00:15:57,380 ma questo è solo quando la Flask Server serve il file HTML, 304 00:15:57,380 --> 00:16:01,610 verrà eseguito questo motore di template e analizzare attraverso questa e compilare le cose in. 305 00:16:01,610 --> 00:16:06,650 Così Flask ha una funzione render_template che potete vedere in fondo qui. 306 00:16:06,650 --> 00:16:14,300 E così quando si visita questa pagina, renderebbe questo hello.html modello, 307 00:16:14,300 --> 00:16:16,407 e poi riempire questa pagina HTML. 308 00:16:16,407 --> 00:16:18,990 Così facciamo solo eseguire questo vero e proprio rapido, e vedere che cosa assomiglia, 309 00:16:18,990 --> 00:16:21,198 e poi andrò attraverso un po 'più in dettaglio. 310 00:16:21,198 --> 00:16:25,380 311 00:16:25,380 --> 00:16:30,260 Così, i vostri modelli sono in corso di andare in una cartella Modelli. 312 00:16:30,260 --> 00:16:33,980 Si farà il punto automaticamente entro il Cartella Modelli per questo modello. 313 00:16:33,980 --> 00:16:35,615 Quindi cerchiamo di aprire questo. 314 00:16:35,615 --> 00:16:47,350 315 00:16:47,350 --> 00:16:50,005 Quindi, io correrò l'esempio Templating. 316 00:16:50,005 --> 00:16:52,820 317 00:16:52,820 --> 00:17:03,660 >> Quindi, se vado a / ciao / Ezra, ha questa orribile, 318 00:17:03,660 --> 00:17:05,930 odioso tag marquee che ho messo in. 319 00:17:05,930 --> 00:17:08,050 Molto bello, molto dinamico. 320 00:17:08,050 --> 00:17:09,349 Io sono un grande fan. 321 00:17:09,349 --> 00:17:13,900 Ma cosa succede se Mi basta andare a, / ciao? 322 00:17:13,900 --> 00:17:15,220 Così appena dice Ciao Mondo. 323 00:17:15,220 --> 00:17:17,678 Non ho fatto passare un nome, e ha riempito in modo automatico. 324 00:17:17,678 --> 00:17:22,050 Vediamo quindi come ha fatto, e come siamo in grado di sbarazzarsi di quel tendone forse. 325 00:17:22,050 --> 00:17:26,240 >> Ecco, questa è una sorta di un esempio interessante di, 326 00:17:26,240 --> 00:17:29,101 se siete a conoscenza di come interruttore dichiarazioni lavorano in una lingua. 327 00:17:29,101 --> 00:17:31,350 Dire questo è un po 'come, quella sorta di una caduta attraverso, 328 00:17:31,350 --> 00:17:34,266 dove realmente attaccati due percorsi diversi per la stessa funzione. 329 00:17:34,266 --> 00:17:41,190 Quindi diamo il / ciao percorso e il / ciao / nome della rotta a Ciao, 330 00:17:41,190 --> 00:17:45,130 e specifichiamo using-- Python consente di specificare la funzione di default arguments-- 331 00:17:45,130 --> 00:17:48,300 quindi se non vi è alcun nome, così se andiamo a solo / ciao, 332 00:17:48,300 --> 00:17:50,680 che filtrerà automaticamente a nome è uguale a None. 333 00:17:50,680 --> 00:17:55,010 >> Allora, rendiamo il Modello con nome = nome, 334 00:17:55,010 --> 00:17:59,510 quindi passerà nel parametro nome pari a questo parametro la funzione nome, 335 00:17:59,510 --> 00:18:00,730 nel modello. 336 00:18:00,730 --> 00:18:04,040 Che ancora non spiega come è decidere se stampare Ciao Mondo, 337 00:18:04,040 --> 00:18:05,100 o stampare il mio nome. 338 00:18:05,100 --> 00:18:08,050 Quindi cerchiamo di guardare in realtà nel modello stesso, 339 00:18:08,050 --> 00:18:11,610 e vedere dove che proviene. 340 00:18:11,610 --> 00:18:18,680 >> Quindi, in questo modello, abbiamo in realtà hanno una logica condizionale, 341 00:18:18,680 --> 00:18:20,580 che alcune persone avrebbero sostengono, in realtà 342 00:18:20,580 --> 00:18:23,730 non dovrebbe avere un sacco di condizionale la logica all'interno del vostro modello stesso. 343 00:18:23,730 --> 00:18:26,310 Dovrebbe essere più all'interno Controller, ma per questo esempio 344 00:18:26,310 --> 00:18:27,476 si tratta di qualcosa di molto piccolo. 345 00:18:27,476 --> 00:18:31,060 Così qui, controlliamo, se il nome, in modo da se il nome non è uguale a None, 346 00:18:31,060 --> 00:18:33,130 se un nome è in realtà passato in, poi ci sarà 347 00:18:33,130 --> 00:18:36,210 dire Ciao, un nome con il intestazione e il tendone, 348 00:18:36,210 --> 00:18:41,490 tutto questo normale HTML, altrimenti, stampare Ciao, Mondo appena normalmente. 349 00:18:41,490 --> 00:18:45,820 Così un paio di cose da notare qui di come si formatta il template, 350 00:18:45,820 --> 00:18:49,110 è che, tutti questi istruzioni condizionali, 351 00:18:49,110 --> 00:18:54,475 un po 'come il modo in cui PHP quando si desidera inserire un po 'di PHP, 352 00:18:54,475 --> 00:18:58,380 si utilizza il meno-che domanda segno, è una sorta di analogo qui 353 00:18:58,380 --> 00:19:00,140 con il {%. 354 00:19:00,140 --> 00:19:02,130 >> Ecco, noi abbiamo il nostro codice condizionale. 355 00:19:02,130 --> 00:19:05,920 E poi, quando si vuole realmente letteralmente valutare qualcosa, e la stampa 356 00:19:05,920 --> 00:19:08,710 fuori per lo schermo, utilizzare le doppie parentesi. 357 00:19:08,710 --> 00:19:12,310 Così qui sono i doppi parentesi graffe, e poi specifichiamo nome, 358 00:19:12,310 --> 00:19:15,500 entro questo, si valuterà al nome della variabile, che 359 00:19:15,500 --> 00:19:18,860 è stata approvata dalla render funzione template, 360 00:19:18,860 --> 00:19:21,484 piuttosto che solo la stampa fuori, se ci siamo liberati di questi, 361 00:19:21,484 --> 00:19:23,150 sarebbe solo stampare la parola "nome". 362 00:19:23,150 --> 00:19:26,340 Quindi, questo è qualcosa da guardare fuori per. 363 00:19:26,340 --> 00:19:29,792 >> Quindi, un'altra cosa da avviso è che, quando ci 364 00:19:29,792 --> 00:19:31,500 desidera utilizzare la Funzione render_template, 365 00:19:31,500 --> 00:19:34,490 in realtà abbiamo importare esplicitamente da Flask. 366 00:19:34,490 --> 00:19:36,915 E questo è un esempio di la modularità di Flask, 367 00:19:36,915 --> 00:19:39,290 che non è necessario importare cose che non ti servono. 368 00:19:39,290 --> 00:19:41,290 Si può solo portare nel funzioni che in realtà 369 00:19:41,290 --> 00:19:43,450 hanno bisogno, che a volte è bello, in modo da non fare 370 00:19:43,450 --> 00:19:46,560 avere tutte queste funzioni seduti intorno che non si sta usando, 371 00:19:46,560 --> 00:19:49,730 ma anche, se si dimentica che si bisogno di importare render_template, 372 00:19:49,730 --> 00:19:52,660 probabilmente otterrete un avvertimento che ti consente di sapere a tale proposito. 373 00:19:52,660 --> 00:19:56,700 Così, questo è templating. 374 00:19:56,700 --> 00:20:01,680 >> Quindi, abbiamo dimostrato come rendere semplici pagine web, 375 00:20:01,680 --> 00:20:04,947 e aggiungere un po 'più logica per essa, in termini di instradamento variabile. 376 00:20:04,947 --> 00:20:08,280 Ti permette di fare cose diverse in base a ciò che si va a URL, e anche allora, dare 377 00:20:08,280 --> 00:20:11,950 il codice HTML un po 'più senso termini di come si vuole rendere le cose. 378 00:20:11,950 --> 00:20:14,210 Non è necessario mettere tutto il codice HTML in Python, 379 00:20:14,210 --> 00:20:16,640 ma per quasi ogni applicazione web, 380 00:20:16,640 --> 00:20:21,480 si sta andando a volere una sorta di modello di dati associati con esso. 381 00:20:21,480 --> 00:20:25,560 >> E così per tradizione, questo sarebbe essere qualcosa di simile a un database SQL. 382 00:20:25,560 --> 00:20:30,280 E si può solo interagire direttamente con SQL. 383 00:20:30,280 --> 00:20:32,190 Python ha, credo che si chiama. 384 00:20:32,190 --> 00:20:33,040 SQLite 3. 385 00:20:33,040 --> 00:20:38,454 Si può solo importare SQLite 3 e eseguire direttamente query SQL, 386 00:20:38,454 --> 00:20:40,870 ma io non so voi, ma io davvero non mi piace, solo, 387 00:20:40,870 --> 00:20:42,750 scrivendo query SQL. 388 00:20:42,750 --> 00:20:45,350 Esso tende a diventare davvero lungo e complicato. 389 00:20:45,350 --> 00:20:49,180 >> E così, cosa che Mi piace usare è ciò che è 390 00:20:49,180 --> 00:20:53,610 noto come ORM, che è un object-relational mapping. 391 00:20:53,610 --> 00:20:56,890 E il punto di object-relational mapping, 392 00:20:56,890 --> 00:21:00,100 è che ci sono due differenti modi si può pensare di database. 393 00:21:00,100 --> 00:21:03,240 >> Quindi l'esempio che Il professor Malan solito 394 00:21:03,240 --> 00:21:07,660 usa in classe, è la tabella Excel, dove ci sono queste righe e le colonne, 395 00:21:07,660 --> 00:21:10,210 e questo è davvero utile per come è rappresentato in SQL 396 00:21:10,210 --> 00:21:13,170 e come interagire con esso, ma un altro modo che in realtà 397 00:21:13,170 --> 00:21:16,390 utile pensare a questo proposito a volte, è in termini di classi e oggetti. 398 00:21:16,390 --> 00:21:20,420 >> Così, invece di pensare di ogni tabella come aventi 399 00:21:20,420 --> 00:21:23,040 questa riga che ha determinato informazioni, si può effettivamente 400 00:21:23,040 --> 00:21:26,100 pensare ad esso come ogni tabella è una classe, 401 00:21:26,100 --> 00:21:29,810 e quindi ogni istanza della classe ha alcune proprietà. 402 00:21:29,810 --> 00:21:35,110 Quindi, in questo esempio, le istanze di la classe sono le righe della tabella, 403 00:21:35,110 --> 00:21:37,490 e poi ogni proprietà sarebbe essere una colonna della tabella. 404 00:21:37,490 --> 00:21:40,840 >> Così, l'ORM che mi piace utilizzare si chiama peewee. 405 00:21:40,840 --> 00:21:43,520 E 'davvero piccolo, un po' come Flask. 406 00:21:43,520 --> 00:21:46,760 Penso che vanno bene insieme, ma ci sono un sacco di altri ORM 407 00:21:46,760 --> 00:21:47,730 che è possibile utilizzare. 408 00:21:47,730 --> 00:21:52,180 Uno più popolare è noto come SQLAlchemy, 409 00:21:52,180 --> 00:21:56,050 e non riesco a ricordare perché ho inizialmente ha scelto Peewee su SQLAlchemy, 410 00:21:56,050 --> 00:21:58,311 o Vorrei dirvi perché io penso che sia il migliore, 411 00:21:58,311 --> 00:22:01,060 ma stiamo solo andando a utilizzare questa uno perché so come usarlo. 412 00:22:01,060 --> 00:22:04,760 >> Quindi, una domanda è, perché dovrebbe preoccuparsi usando un ORM, 413 00:22:04,760 --> 00:22:07,552 invece di direttamente scrivere query SQL? 414 00:22:07,552 --> 00:22:09,760 E penso che il caso migliore, è che non si fa in realtà 415 00:22:09,760 --> 00:22:11,356 necessario scrivere query SQL. 416 00:22:11,356 --> 00:22:14,480 È molto più facile, come ti faccio vedere, a fare le cose come selezione, inserimento, 417 00:22:14,480 --> 00:22:16,157 l'eliminazione, in particolare la creazione di tabelle. 418 00:22:16,157 --> 00:22:17,990 E 'molto più facile scrivere la struttura di classe, 419 00:22:17,990 --> 00:22:22,250 che è di strutturare un Create TABLE, ma una cosa 420 00:22:22,250 --> 00:22:25,710 di essere a conoscenza, è che l'ORM farà del suo meglio 421 00:22:25,710 --> 00:22:28,640 per capire quale sia il più interrogazione SQL efficiente sarebbe, 422 00:22:28,640 --> 00:22:30,110 ma a volte si sbaglia. 423 00:22:30,110 --> 00:22:32,660 >> E soprattutto se siete lavorando con una grande base di dati, 424 00:22:32,660 --> 00:22:35,557 si può notare che una query che dovrebbe essere in esecuzione veloce, 425 00:22:35,557 --> 00:22:36,640 è in realtà più tempo. 426 00:22:36,640 --> 00:22:40,164 E se si guarda sotto il cofano di come l'ORM che sta interpretando in SQL, 427 00:22:40,164 --> 00:22:42,080 si potrebbe fare qualcosa veramente ridicolo, 428 00:22:42,080 --> 00:22:44,371 solo perché è una sorta di indicò le vostre intenzioni sbagliato. 429 00:22:44,371 --> 00:22:48,080 E, ci sono stati momenti in cui Ho dovuto ignorare esso, e solo 430 00:22:48,080 --> 00:22:52,429 eseguire le mie query SQL, appena perché ha analizzato in un modo strano. 431 00:22:52,429 --> 00:22:54,220 Quindi, vi è una certa sovraccarico, solo in modo 432 00:22:54,220 --> 00:22:58,680 che compila il tuo dichiarazioni giù in SQL. 433 00:22:58,680 --> 00:23:06,200 >> Quindi, diamo un'occhiata eccellente rapidamente a un semplice esempio di un modello di dati 434 00:23:06,200 --> 00:23:07,350 che si potrebbe utilizzare. 435 00:23:07,350 --> 00:23:11,880 Quindi, questo è il codice Python, e quindi la prima cosa che voglio fare è da 436 00:23:11,880 --> 00:23:12,950 import peewee *. 437 00:23:12,950 --> 00:23:15,850 Quindi, a differenza di Flask, dove si ha tutti questi singoli moduli, 438 00:23:15,850 --> 00:23:18,125 e si desidera importare Flask, e scrivere un modello, e alcuni altri 439 00:23:18,125 --> 00:23:20,690 che vedremo in seguito, da peewee, si può semplicemente importare tutto, 440 00:23:20,690 --> 00:23:22,290 perché è un piuttosto piccola biblioteca. 441 00:23:22,290 --> 00:23:26,490 >> Quindi, la prima cosa che si vuole fare, è effettivamente creare questo oggetto di database. 442 00:23:26,490 --> 00:23:31,212 Quindi, avete db = SQLiteDatabase, e poi il nome del database. 443 00:23:31,212 --> 00:23:33,170 E questo sarà effettivamente creare un oggetto di database 444 00:23:33,170 --> 00:23:36,230 che è possibile interagire con, con peewee. 445 00:23:36,230 --> 00:23:40,570 >> E poi, abbiamo la reale modello che vogliamo creare. 446 00:23:40,570 --> 00:23:42,470 Quindi la tabella che vogliamo creare. 447 00:23:42,470 --> 00:23:47,270 Quindi, all'interno di peewee, ogni classe ha la propria tabella all'interno del database. 448 00:23:47,270 --> 00:23:52,800 Quindi, tutte le classi ereditare da il modello base, 449 00:23:52,800 --> 00:23:55,960 e il modello M maiuscola è qualcosa che è definito in peewee. 450 00:23:55,960 --> 00:24:02,162 >> Quindi, tutti i modelli dovrebbero ereditare, come loro supremo superclasse, 451 00:24:02,162 --> 00:24:04,620 essi dovrebbero ereditare dal modello, ma ciò che è davvero cool, 452 00:24:04,620 --> 00:24:07,610 è che si può effettivamente avere il vostro modelli ereditano le une dalle altre. 453 00:24:07,610 --> 00:24:10,530 E un sacco di tempo, il vostro modelli di dati non necessariamente 454 00:24:10,530 --> 00:24:13,754 fare una gerarchia di ereditarietà bella, ma tempi in cui lo fanno, è davvero bello, 455 00:24:13,754 --> 00:24:15,920 perché avete il modello inerente l'uno dall'altro. 456 00:24:15,920 --> 00:24:19,710 >> Così, abbiamo definito questa classe 'studente', che eredita un modello, 457 00:24:19,710 --> 00:24:21,170 ed ha tre proprietà. 458 00:24:21,170 --> 00:24:24,080 Ha un ID, che è un PrimaryKeyField, che 459 00:24:24,080 --> 00:24:26,920 è qualcosa che ha fornito by Peewee, nome è un CharField, 460 00:24:26,920 --> 00:24:28,490 e un grado è un IntegerField. 461 00:24:28,490 --> 00:24:32,260 Quindi questo può o non può essere come CS50 memorizza in realtà tutto 462 00:24:32,260 --> 00:24:33,650 voti degli studenti. 463 00:24:33,650 --> 00:24:36,060 Non è, ma questo è come lo farei. 464 00:24:36,060 --> 00:24:37,920 >> E poi ha, dentro questa classe, e questo 465 00:24:37,920 --> 00:24:41,620 è qualcosa che si può fare con Python, è possibile avere classi nidificate. 466 00:24:41,620 --> 00:24:43,920 E questo è qualcosa ciò che è richiesto da peewee. 467 00:24:43,920 --> 00:24:47,250 Quindi, questa classe di Meta, si ha per specificare che il database è 468 00:24:47,250 --> 00:24:49,830 uguale all'oggetto che abbiamo creato in precedenza. 469 00:24:49,830 --> 00:24:54,339 E questo dice ciò file è questa tabella in realtà sta per essere contenuta in. 470 00:24:54,339 --> 00:24:57,130 Quindi questo è qualcosa che si deve a fare all'interno di tutti i modelli. 471 00:24:57,130 --> 00:24:59,380 Devi solo specificare all'interno di questa classe di Meta 472 00:24:59,380 --> 00:25:01,400 tale database è pari a db. 473 00:25:01,400 --> 00:25:03,940 Quindi quello che di solito fare, se ho un sacco di modelli diversi, 474 00:25:03,940 --> 00:25:05,910 è che ho una base il modello, che di solito 475 00:25:05,910 --> 00:25:08,839 basta chiamare "modello base" che ha la classe Meta, 476 00:25:08,839 --> 00:25:10,380 e imposta il database pari a db. 477 00:25:10,380 --> 00:25:13,710 E poi tutti i miei modelli successivi erediteranno da questa classe di base. 478 00:25:13,710 --> 00:25:16,760 E poi io non devo preoccuparmi sull'impostazione della classe di Meta. 479 00:25:16,760 --> 00:25:21,490 >> Così, quando questo diventa realtà compilato giù in un'istruzione SQL, 480 00:25:21,490 --> 00:25:24,875 sembra che questa cosa brutta giù qui, "Crea tabella ID studente intero, 481 00:25:24,875 --> 00:25:26,020 " qualunque. 482 00:25:26,020 --> 00:25:30,002 >> E, penso che sia più breve, questa query SQL proprio qui, 483 00:25:30,002 --> 00:25:32,960 ma se si guarda a questa classe qui potete vedere esattamente cosa sta succedendo. 484 00:25:32,960 --> 00:25:36,116 Potete vedere quali tipi di campi ci sono, cosa stanno sono chiamati, 485 00:25:36,116 --> 00:25:38,115 e così, penso che guardando questo codice Python 486 00:25:38,115 --> 00:25:43,340 è molto più leggibile di cercando di scrivere questa query SQL. 487 00:25:43,340 --> 00:25:45,990 >> Quindi, al fine di effettivamente utilizzare il database, 488 00:25:45,990 --> 00:25:48,470 dobbiamo per connettersi ad essa all'interno Python. 489 00:25:48,470 --> 00:25:52,770 Quindi, io di solito scrivere una funzione chiamata initialize_db che fa due cose. 490 00:25:52,770 --> 00:25:54,880 Prende nel database oggetto db e 491 00:25:54,880 --> 00:25:58,360 collega ad esso, che si apre solo fino sezione al database. 492 00:25:58,360 --> 00:26:00,860 Se siete solo in esecuzione anche se sito web sul computer locale, 493 00:26:00,860 --> 00:26:04,320 non è un super grosso problema di cui preoccuparsi su come collegare e scollegare, 494 00:26:04,320 --> 00:26:06,885 ma se si esegue su un sito web, 495 00:26:06,885 --> 00:26:10,010 vuole fare in modo che, ogni volta che un utente collega ad esso, quando chiudono fuori 496 00:26:10,010 --> 00:26:12,270 il sito web, in modo che si disconnettono non avere un gruppo di persone connesse 497 00:26:12,270 --> 00:26:14,480 al database tutto in una volta. 498 00:26:14,480 --> 00:26:16,370 >> E poi, quando si la connessione al database, 499 00:26:16,370 --> 00:26:20,832 si desidera chiamare db.create_tables, ed elencare i modelli per ciò che si vuole 500 00:26:20,832 --> 00:26:21,540 per creare le tabelle. 501 00:26:21,540 --> 00:26:23,950 Così qui, voglio solo creare per questo studente. 502 00:26:23,950 --> 00:26:28,070 E poi, ciò che è importante, è quello di specificare sicuro = True maggior parte del tempo. 503 00:26:28,070 --> 00:26:30,380 Così che cosa questa dichiarazione farà, è che 504 00:26:30,380 --> 00:26:33,580 crea tabelle per il studente modello, ma solo 505 00:26:33,580 --> 00:26:36,109 se quel tavolo non ha stato creato già. 506 00:26:36,109 --> 00:26:37,400 Questo è ciò che le specifica di sicurezza. 507 00:26:37,400 --> 00:26:39,150 Così non sovrascriverà la vostra tabella esistente, 508 00:26:39,150 --> 00:26:41,525 creerà solo una nuova tavolo se non c'è uno c'è. 509 00:26:41,525 --> 00:26:45,090 Quindi, si può solo creare le tabelle di una volta utilizzando SQL. 510 00:26:45,090 --> 00:26:49,410 E poi seduta in tale banca dati lì, e quindi connettersi a ogni volta, 511 00:26:49,410 --> 00:26:52,450 ma di solito è bello solo per mettere nel presente invito create_tables, 512 00:26:52,450 --> 00:26:55,550 in modo che, se mai elimina il database quando si esegue il web 513 00:26:55,550 --> 00:26:57,960 di nuovo app, sarà ricrearlo. 514 00:26:57,960 --> 00:27:00,730 >> Quindi, basta assicurarsi che al sicuro è specificato per essere vero, 515 00:27:00,730 --> 00:27:03,580 o troverete i vostri dati appena ottenendo colpita ogni volta. 516 00:27:03,580 --> 00:27:06,380 E poi, si può chiamare initialize_db stabilire 517 00:27:06,380 --> 00:27:09,820 una connessione e creare tavoli se necessario. 518 00:27:09,820 --> 00:27:13,150 >> Quindi, la cosa più comune che si vuole fare, 519 00:27:13,150 --> 00:27:15,920 o una delle cose più comuni, è da inserire in realtà le cose 520 00:27:15,920 --> 00:27:17,170 nel database. 521 00:27:17,170 --> 00:27:19,430 E così, invece di dover di scrivere un INSERT INTO 522 00:27:19,430 --> 00:27:21,990 dichiarazione con tutti I valori indicati, 523 00:27:21,990 --> 00:27:24,650 si può effettivamente chiamare funzione sulla classe studente. 524 00:27:24,650 --> 00:27:28,200 Così, quando si crea una classe che eredita dal modello, 525 00:27:28,200 --> 00:27:30,200 ha questa creare metodo. 526 00:27:30,200 --> 00:27:33,870 >> Quindi, fate classe name.create, e di specificare i parametri 527 00:27:33,870 --> 00:27:35,260 che si desidera passare a. 528 00:27:35,260 --> 00:27:39,200 Quindi, se voglio aggiungere alcuni studenti al nostro esempio CS50 libro grado, 529 00:27:39,200 --> 00:27:41,820 Mi metterò a David, che ha un molto buona qualità, ha un 95. 530 00:27:41,820 --> 00:27:45,100 E io, che non sta facendo così bene in CS50, ho un 50. 531 00:27:45,100 --> 00:27:47,600 E così, la cosa bella di cosa questa funzione creare fa, 532 00:27:47,600 --> 00:27:53,040 è che restituisce l'istanza, o fila, che ha creato all'interno della tabella, 533 00:27:53,040 --> 00:27:55,750 e così poi si memorizza che in un variabili, e il lavoro in un secondo momento. 534 00:27:55,750 --> 00:27:58,830 È possibile cambiare intorno, che Ti faccio vedere un esempio di. 535 00:27:58,830 --> 00:28:03,050 >> Notate che non ho devono specificare l'ID, 536 00:28:03,050 --> 00:28:09,340 perché essendo la PrimaryKeyField, che verrà automaticamente 537 00:28:09,340 --> 00:28:10,930 incrementarlo se non viene specificato esso. 538 00:28:10,930 --> 00:28:12,250 E, in realtà, probabilmente non deve specificarlo, 539 00:28:12,250 --> 00:28:14,810 perché si potrebbe accidentalmente clobber ID di qualcun altro. 540 00:28:14,810 --> 00:28:16,830 E si vuole fare Assicurarsi che è unico. 541 00:28:16,830 --> 00:28:20,662 >> Quindi, in realtà, il più cosa comune che si vuole fare, 542 00:28:20,662 --> 00:28:22,620 probabilmente è selezionare fuori del database una volta 543 00:28:22,620 --> 00:28:24,078 hanno un sacco di informazioni in là. 544 00:28:24,078 --> 00:28:27,360 E così, se si vuole ottenere tutto, così l'equivalente della stella select 545 00:28:27,360 --> 00:28:30,940 dalla dichiarazione studenti, è sarebbe solo student.select. 546 00:28:30,940 --> 00:28:34,380 E che vi darà indietro un array con tutti gli studenti oggetti in esso 547 00:28:34,380 --> 00:28:35,770 che di eseguire iterazioni su volete. 548 00:28:35,770 --> 00:28:37,019 È possibile ottenere le cose fuori di esso. 549 00:28:37,019 --> 00:28:39,310 E la maggior parte del tempo, è non voglio solo fare selezione, 550 00:28:39,310 --> 00:28:40,935 che realmente desidera specificare qualcosa. 551 00:28:40,935 --> 00:28:44,580 E così, è possibile concatenare insieme queste chiamate di funzione, 552 00:28:44,580 --> 00:28:48,830 come come si farebbe a catena insieme le dichiarazioni in SQL. 553 00:28:48,830 --> 00:28:53,002 Così si può fare student.select (). Dove in questo esempio. 554 00:28:53,002 --> 00:28:54,710 E poi, si può specificare le condizioni, 555 00:28:54,710 --> 00:28:57,880 solo utilizzando Python normale Booleane per controllare le cose. 556 00:28:57,880 --> 00:29:02,110 >> Quindi, in questo caso, si vuole limitare ciò che si sta selezionando per, 557 00:29:02,110 --> 00:29:06,790 dove student.grade è uguale a 50, e student.name è uguale a Ezra, 558 00:29:06,790 --> 00:29:09,130 in modo che sarà solo mi uscirne. 559 00:29:09,130 --> 00:29:11,340 E notare, uno davvero cosa sottile ecco 560 00:29:11,340 --> 00:29:15,570 che, se si desidera specificare una e / o OR e / o, 561 00:29:15,570 --> 00:29:19,840 in Python, che si usa normalmente, Penso che la parola "e" in realtà, 562 00:29:19,840 --> 00:29:23,351 ma qui si utilizza il singolo commerciale, che normalmente è un operatore binario, 563 00:29:23,351 --> 00:29:25,600 ma in questo caso particolare, solo il modo peewee fa, 564 00:29:25,600 --> 00:29:27,660 si utilizza il singolo commerciale per specificare "e." 565 00:29:27,660 --> 00:29:29,451 Questo è qualcosa che Mi si confondono un sacco, 566 00:29:29,451 --> 00:29:32,530 ma non compare tanto in pratica. 567 00:29:32,530 --> 00:29:36,350 >> E poi, una volta che avete tutti gli studenti fuori della base di dati, 568 00:29:36,350 --> 00:29:39,420 una volta che avete fatto siete select e la vostra usura o qualsiasi altra cosa, 569 00:29:39,420 --> 00:29:42,334 è possibile utilizzare un ciclo foreach, proprio come normale in Python, 570 00:29:42,334 --> 00:29:44,500 con qualsiasi tipo di iteratore o con qualsiasi tipo di matrice. 571 00:29:44,500 --> 00:29:46,333 Così si può fare, per s in student.select (). whe 572 00:29:46,333 --> 00:29:52,930 re (Student.grade <75), e quindi questa volontà iterare su ogni studente nella tabella 573 00:29:52,930 --> 00:29:56,260 la cui qualità è inferiore a 75, che in questo caso, è ancora solo a me. 574 00:29:56,260 --> 00:29:59,218 E allora si potrebbe fare qualcosa entro quel ciclo, come me invia un'email 575 00:29:59,218 --> 00:30:01,680 e io in realtà dire girare nei miei insiemi di problemi. 576 00:30:01,680 --> 00:30:04,550 >> Quindi, un'altra cosa è possibile fare, è è davvero facile 577 00:30:04,550 --> 00:30:06,460 aggiornare righe all'interno della tabella. 578 00:30:06,460 --> 00:30:08,720 Quindi, ricordate di nuovo qui, la tua quando ho inserito, 579 00:30:08,720 --> 00:30:11,440 Ho preso il valore che era restituito da student.create, 580 00:30:11,440 --> 00:30:14,920 e ho assegnato a nome chiamato Ezra. 581 00:30:14,920 --> 00:30:18,995 E così ora, è possibile cambiare la I valori all'interno di tale istanza, 582 00:30:18,995 --> 00:30:20,870 proprio come si farebbe con una classe normale in Python. 583 00:30:20,870 --> 00:30:25,060 >> Così si può impostare ezra.grade = 95 e che aggiornerà la copia locale, 584 00:30:25,060 --> 00:30:28,380 ma se si vuole realmente commit che il cambiamento di banca dati, 585 00:30:28,380 --> 00:30:31,410 devi chiamare ezra.save, così si chiama il metodo .save 586 00:30:31,410 --> 00:30:32,650 l'istanza. 587 00:30:32,650 --> 00:30:38,085 >> E così ora, ho cambiato con successo la mia prima scelta all'interno del database. 588 00:30:38,085 --> 00:30:41,210 Così, allora diciamo che mi beccano cambiare il mio grado all'interno del database. 589 00:30:41,210 --> 00:30:44,126 Il professor Malan è destinata probabilmente a voler eliminare me dalla classe, 590 00:30:44,126 --> 00:30:48,630 e così si può chiamare il .delete metodo di istanza proprio su quella cosa. 591 00:30:48,630 --> 00:30:51,674 >> Quindi, se si voleva andare di nuovo in questo ciclo qui, 592 00:30:51,674 --> 00:30:53,465 e in realtà, invece di invio di email tutti 593 00:30:53,465 --> 00:30:56,577 degli studenti il ​​cui grado è meno di 75, si voleva eliminarli, 594 00:30:56,577 --> 00:30:58,660 all'interno di questo ciclo si potrebbe chiamare istanza s.delete. 595 00:30:58,660 --> 00:31:04,180 596 00:31:04,180 --> 00:31:07,780 E l'ultima cosa che vuoi fare, è ogni volta che si stabilisce una connessione, 597 00:31:07,780 --> 00:31:10,350 e il gioco è fatto con il vostro lavoro, si desidera chiamare db.close, 598 00:31:10,350 --> 00:31:13,190 dove db è quel database obiettare che avevamo prima. 599 00:31:13,190 --> 00:31:18,290 E si vuole fare in modo che tutto viene chiuso fuori. 600 00:31:18,290 --> 00:31:18,790 >> Raffreddare. 601 00:31:18,790 --> 00:31:22,410 Così ora, ho un esempio di applicazione. 602 00:31:22,410 --> 00:31:26,880 Ho una sorta di pre-fatto tutto solo in modo che non ci sarà alcuna codifica diretta 603 00:31:26,880 --> 00:31:30,220 errori, ma siamo in grado di camminare attraverso e vedere come si possono mettere Flask 604 00:31:30,220 --> 00:31:33,685 e Peewee insieme, e fare una semplice applicazione. 605 00:31:33,685 --> 00:31:38,680 Io lo chiamo CS50 declamazione, ed è una sorta di semplice piattaforma di blog. 606 00:31:38,680 --> 00:31:41,150 >> Quindi, in primo luogo, corro e mostrano quello che sembra, 607 00:31:41,150 --> 00:31:42,890 e poi possiamo guardare più nel codice. 608 00:31:42,890 --> 00:32:00,470 609 00:32:00,470 --> 00:32:02,830 Okay, facciamo solo eseguire questo. 610 00:32:02,830 --> 00:32:14,040 611 00:32:14,040 --> 00:32:17,250 Fresco, farò questo un po 'più piccolo. 612 00:32:17,250 --> 00:32:20,000 Non è molto bella, proprio perché Non ho fatto un sacco di CSS, 613 00:32:20,000 --> 00:32:23,255 ma ciò che fa è, ha Questo database di post sul blog, 614 00:32:23,255 --> 00:32:25,630 e passa attraverso tutti loro, e li visualizza 615 00:32:25,630 --> 00:32:28,170 sulla pagina in ordine di più recente. 616 00:32:28,170 --> 00:32:30,920 E così questi sono solo alcuni messaggi che avevo salvato nel database. 617 00:32:30,920 --> 00:32:35,680 >> Quindi, se vogliamo creare un nuovo posta, possiamo andare ad aggiungere un nuovo post, 618 00:32:35,680 --> 00:32:42,720 e siamo in grado di inserire il titolo della post, in modo simile, CS50 seminario. 619 00:32:42,720 --> 00:32:45,360 620 00:32:45,360 --> 00:32:46,735 Wow, davvero godendo il seminario. 621 00:32:46,735 --> 00:32:51,070 622 00:32:51,070 --> 00:32:52,270 >> Raffreddare. 623 00:32:52,270 --> 00:32:56,060 Poi si stampa post, e sarà Per favore usare torna alla home page, 624 00:32:56,060 --> 00:33:00,039 e poi vedrai che è stato aggiunto il nuovo messaggio. 625 00:33:00,039 --> 00:33:01,580 E abbiamo ancora tutti quelli lì. 626 00:33:01,580 --> 00:33:08,080 Così ora, facciamo un passo attraverso tutte le codice e vedere come questo viene implementato. 627 00:33:08,080 --> 00:33:11,995 >> Quindi, penso che la prima cosa che ti permette di dare un'occhiata a, è in realtà i modelli. 628 00:33:11,995 --> 00:33:14,120 Un sacco di tempo, quando si sta progettando qualcosa, 629 00:33:14,120 --> 00:33:17,036 si vuole pensare prima a come si sta andando a rappresentare i dati, 630 00:33:17,036 --> 00:33:22,915 e quindi progettare le cose intorno a quella, in modo che tutto ha un senso. 631 00:33:22,915 --> 00:33:25,290 E questo è in realtà come io lo ha fatto quando stavo facendo questo, 632 00:33:25,290 --> 00:33:28,030 Mi sono seduto e pensato, quello che voglio in un post. 633 00:33:28,030 --> 00:33:32,130 >> Così, qui, abbiamo la stessa struttura che accennavo prima, 634 00:33:32,130 --> 00:33:33,755 dove facciamo db = SqlDatabase ('posts.db'). 635 00:33:33,755 --> 00:33:37,840 636 00:33:37,840 --> 00:33:40,980 In realtà, probabilmente non si vuole a codificare nel database del vostro nome. 637 00:33:40,980 --> 00:33:43,730 Questo dovrebbe probabilmente essere un parametro che è memorizzato da qualche parte, forse 638 00:33:43,730 --> 00:33:45,940 in un file di configurazione, ma in un piccolo esempio come questo, 639 00:33:45,940 --> 00:33:48,310 va bene il codice duro che in. 640 00:33:48,310 --> 00:33:53,510 >> Quindi ora, abbiamo questa classe Post, che eredita dal modello base. 641 00:33:53,510 --> 00:33:56,930 E ha, di nuovo, la ID = PrimaryKeyField. 642 00:33:56,930 --> 00:34:02,250 In realtà, se non si specifica, se io in realtà sono liberato di questo, 643 00:34:02,250 --> 00:34:07,152 allora Peewee ci prenderemo cura di creando automaticamente quel campo ID, 644 00:34:07,152 --> 00:34:09,360 e lo farà automaticamente ne fanno un PrimaryKey, che 645 00:34:09,360 --> 00:34:12,485 Penso che è veramente bello, perché di solito, questo è qualcosa che si desidera avere, 646 00:34:12,485 --> 00:34:16,239 ma mi piace metterlo in particolare, solo così mi ricordo che è lì. 647 00:34:16,239 --> 00:34:19,480 Ma se non si specifica che, che sarà lì automaticamente. 648 00:34:19,480 --> 00:34:22,198 >> Allora, ho un appuntamento che è un DateTimeField, e tutti 649 00:34:22,198 --> 00:34:24,864 questi diversi campi, se consultare la documentazione peewee, 650 00:34:24,864 --> 00:34:28,920 ti do una lista dei diversi tipi di campi che è possibile utilizzare. 651 00:34:28,920 --> 00:34:34,440 Per la maggior parte, è analogo a quello che si vede in SQL. 652 00:34:34,440 --> 00:34:37,699 Quindi c'è un CharField, un VarCharFields, TextField, 653 00:34:37,699 --> 00:34:40,550 che sono per molto tempo testi, come un post sul blog 654 00:34:40,550 --> 00:34:44,460 potenzialmente, DateTimeFields, DoubleFields, FloatFields, 655 00:34:44,460 --> 00:34:46,100 tutte cose del genere. 656 00:34:46,100 --> 00:34:51,570 >> E si può passare a altri argomenti ad esso, che non ha specificato qui. 657 00:34:51,570 --> 00:34:55,719 Diciamo, per esempio, tu non vuoi consentire a due posti di avere lo stesso titolo, 658 00:34:55,719 --> 00:34:59,672 è possibile specificare qualcosa come unico = True, 659 00:34:59,672 --> 00:35:02,880 e questo è solo un parametro in più per il campo che quando compila giù 660 00:35:02,880 --> 00:35:06,865 in SQL, specificherà che deve essere unico. 661 00:35:06,865 --> 00:35:09,740 È inoltre possibile specificare qualcosa di simile non nullo e tutte le altre cose 662 00:35:09,740 --> 00:35:11,750 si fa normalmente in SQL. 663 00:35:11,750 --> 00:35:16,020 Quindi, questo è un piuttosto semplice modello che ha la data. 664 00:35:16,020 --> 00:35:19,460 Notate qui, all'interno del DateTimeField, Ho specificato che cosa il valore predefinito è. 665 00:35:19,460 --> 00:35:22,560 Ho specificato che sia datetime.datetime.now, 666 00:35:22,560 --> 00:35:24,920 a causa del modo che questo viene valutato, 667 00:35:24,920 --> 00:35:28,750 in realtà valuta il DateTime.Now quando 668 00:35:28,750 --> 00:35:32,110 Viene inserito nel database. 669 00:35:32,110 --> 00:35:34,760 >> Penso che, mi piacerebbe avere per controllare due volte questo, 670 00:35:34,760 --> 00:35:38,222 ma se avete fatto qualcosa di simile, poi sarebbe in realtà la valutazione che una volta, 671 00:35:38,222 --> 00:35:40,180 e poi il DateTime sia sempre la stessa. 672 00:35:40,180 --> 00:35:44,240 Quindi, solo se si sta facendo qualcosa con datetimes, doppio controllo 673 00:35:44,240 --> 00:35:47,080 che sta valutando quando viene effettivamente inserita, oppure 674 00:35:47,080 --> 00:35:48,780 potrebbe essere confuso. 675 00:35:48,780 --> 00:35:51,221 >> Il titolo è solo un CharField, che ci 676 00:35:51,221 --> 00:35:53,970 sono più argomenti si può passare nello specificare esattamente quanto tempo 677 00:35:53,970 --> 00:35:56,170 voglio che sia, ma qui, non è davvero un problema. 678 00:35:56,170 --> 00:35:58,687 E testo sarà il testo di tutto il post, 679 00:35:58,687 --> 00:36:01,020 e che sta per essere un TextField solo perché si vuole 680 00:36:01,020 --> 00:36:03,370 per permettere che sia una bella lunga serie. 681 00:36:03,370 --> 00:36:05,970 >> Poi abbiamo questo Meta sottoclasse che proprio 682 00:36:05,970 --> 00:36:11,250 Specifica che vogliamo il database dove questo è in realtà aperto in 683 00:36:11,250 --> 00:36:14,267 per essere l'oggetto db che abbiamo qui. 684 00:36:14,267 --> 00:36:16,350 E l'ultima cosa che abbiamo qui, è proprio questa funzione 685 00:36:16,350 --> 00:36:18,120 che stiamo andando a utilizzare dalla nostra applicazione principale 686 00:36:18,120 --> 00:36:23,970 per inizializzare il database per la connessione a , e poi per creare la tabella Post. 687 00:36:23,970 --> 00:36:26,880 >> Ora, diamo un'occhiata a l'applicazione principale stessa. 688 00:36:26,880 --> 00:36:30,800 Quindi questo è un bel po 'più a lungo di quelli 689 00:36:30,800 --> 00:36:34,840 che abbiamo visto prima, ma speriamo non troppo male. 690 00:36:34,840 --> 00:36:37,140 Quindi, mi estendo questo fuori. 691 00:36:37,140 --> 00:36:38,370 Va bene. 692 00:36:38,370 --> 00:36:42,070 >> Così, notare e la parte superiore ho importato un sacco di altre cose 693 00:36:42,070 --> 00:36:44,129 da Flask che noi non abbiamo veramente visto prima. 694 00:36:44,129 --> 00:36:46,670 E si spera, possiamo passare attraverso ognuno di questi uno per uno 695 00:36:46,670 --> 00:36:49,420 e parlare un po 'di più li, scelte per esempio. 696 00:36:49,420 --> 00:36:51,380 Quindi, abbiamo la Flask, e il render_template, 697 00:36:51,380 --> 00:36:54,370 che abbiamo visto prima, questo oggetto richiesta, 698 00:36:54,370 --> 00:37:00,400 che arriverà quando si guarda a come la forma che stavo mostrando in realtà 699 00:37:00,400 --> 00:37:01,170 lavori. 700 00:37:01,170 --> 00:37:04,850 Redirect, che consente di reindirizzare di ritorno da Crea nuovo messaggio 701 00:37:04,850 --> 00:37:11,710 Torna alla homepage originale, e quindi URL, che è qualcosa che consente di 702 00:37:11,710 --> 00:37:15,550 capire dove sulla sito web una pagina particolare è. 703 00:37:15,550 --> 00:37:17,810 >> Allora, la prossima cosa che faccio, è che l'importazione 704 00:37:17,810 --> 00:37:21,550 tutte le informazioni dai modelli file che stavamo solo guardando. 705 00:37:21,550 --> 00:37:23,140 E, sì. 706 00:37:23,140 --> 00:37:28,720 >> Quindi, qualcosa di nuovo che viene quando hai a che fare con, 707 00:37:28,720 --> 00:37:31,850 soprattutto banche dati, è che è possibile specificare 708 00:37:31,850 --> 00:37:35,110 una funzione che viene chiamato prima ogni richiesta, e la funzione che viene 709 00:37:35,110 --> 00:37:39,690 chiamato dopo ogni richiesta, con questo Richiesta funzione decorator app.before. 710 00:37:39,690 --> 00:37:42,324 >> E così questo avrà eseguito laddove questa funzione è. 711 00:37:42,324 --> 00:37:44,240 Ciò non deve essere chiamato prima richiesta, 712 00:37:44,240 --> 00:37:46,281 ma di solito questo è qualcosa sensibile chiamarlo. 713 00:37:46,281 --> 00:37:48,580 714 00:37:48,580 --> 00:37:51,650 È possibile specificare qualsiasi funzione si vuole ottenere chiamato lì, 715 00:37:51,650 --> 00:37:56,330 così ho specificato questo initialize_db funzione che abbiamo avuto di nuovo nei Modelli 716 00:37:56,330 --> 00:38:02,390 file, in modo prima di ogni richiesta, vogliono connettersi al database. 717 00:38:02,390 --> 00:38:04,560 >> Ci sono due diversi modi si può fare questo. 718 00:38:04,560 --> 00:38:10,830 Si può fareapp., I credere che sia after_request. 719 00:38:10,830 --> 00:38:13,800 E la differenza tra after_request e teardown_request, 720 00:38:13,800 --> 00:38:17,590 è che after_request accadrà soltanto se la richiesta effettivamente era valida. 721 00:38:17,590 --> 00:38:20,440 E così, solo se la richiesta ha avuto successo, 722 00:38:20,440 --> 00:38:22,490 se nulla è andato storto, ma teardown_request 723 00:38:22,490 --> 00:38:26,300 avviene nel caso di un successo richiesta, o nel caso di un errore. 724 00:38:26,300 --> 00:38:28,252 >> Così, di solito, si vuole utilizzare teardown_request, 725 00:38:28,252 --> 00:38:30,460 a meno che non si vuole fare qualcosa, soprattutto diverso 726 00:38:30,460 --> 00:38:31,470 nel caso di un errore. 727 00:38:31,470 --> 00:38:35,122 Ma per chiudere il database, se si riesce o se non riesce, 728 00:38:35,122 --> 00:38:37,080 facciamo si desidera disconnettersi dal database. 729 00:38:37,080 --> 00:38:41,240 Così si chiama, db.close sull'oggetto db. 730 00:38:41,240 --> 00:38:43,740 >> Si noti che il teardown_request prende in un'eccezione. 731 00:38:43,740 --> 00:38:46,781 Così si può controllare se c'era effettivamente un errore quando stava chiudendo, 732 00:38:46,781 --> 00:38:49,390 ma qui, si spera, ci Non sono un sacco di errori, 733 00:38:49,390 --> 00:38:52,720 quindi stiamo appena sorta di ignorare questo. 734 00:38:52,720 --> 00:38:55,990 >> Va bene, e il resto non è troppo male. 735 00:38:55,990 --> 00:39:02,240 Così, quando andiamo alla home page, abbiamo reso questo modello home.html 736 00:39:02,240 --> 00:39:03,490 che si aprirà. 737 00:39:03,490 --> 00:39:06,240 Il pass è in post uguale a, e che cosa questo 738 00:39:06,240 --> 00:39:10,260 fa è, ricordate che abbiamo questo post il modello, in modo da selezionare tutti i posti, 739 00:39:10,260 --> 00:39:13,890 e poi un'altra cosa che puoi fare, è possibile specificare la clausola WHERE, 740 00:39:13,890 --> 00:39:16,910 è possibile specificare un ORDER BY, e così prendiamo 741 00:39:16,910 --> 00:39:18,820 tutti i post che ottenere selezionato, e poi 742 00:39:18,820 --> 00:39:22,590 li ordiniamo dal post.date.descending. 743 00:39:22,590 --> 00:39:25,030 E che specificare, quando in realtà escono, 744 00:39:25,030 --> 00:39:29,250 il più recente sarà molto prima. 745 00:39:29,250 --> 00:39:31,420 >> E poi, si passa che in il modello home.html, 746 00:39:31,420 --> 00:39:34,240 quindi cerchiamo di realtà aprono che modello davvero veloce, 747 00:39:34,240 --> 00:39:36,760 e dare un'occhiata a come che sta lavorando. 748 00:39:36,760 --> 00:39:42,130 E questo non è grande HTML, ma si spera, possiamo concentrarci su Python. 749 00:39:42,130 --> 00:39:46,960 >> Quindi c'è un collegamento al Nuovo Post, e quindi questa specifica il percorso 750 00:39:46,960 --> 00:39:51,580 all'interno del Flask che abbiamo definire, che è proprio qui. 751 00:39:51,580 --> 00:39:56,310 Questa è la nuova rotta palo, e si precisa che quassù. 752 00:39:56,310 --> 00:40:00,450 E così che è un link che poi andare a quel percorso nel server Flask. 753 00:40:00,450 --> 00:40:03,820 >> La cosa più interessante è questo ciclo for qui. 754 00:40:03,820 --> 00:40:07,685 Quindi si precisa che questo parametro posto che 755 00:40:07,685 --> 00:40:09,560 è stata approvata nel Funzione render_template, 756 00:40:09,560 --> 00:40:13,550 per ogni post nel post di oggetto che viene passato in. 757 00:40:13,550 --> 00:40:16,600 Vogliamo stampare il titolo del post, nel 1 ° semestre, 758 00:40:16,600 --> 00:40:21,930 e poi sotto, vogliamo stampare il testo del messaggio all'interno di un paragrafo. 759 00:40:21,930 --> 00:40:25,710 >> E qui, si può effettivamente chiamare una funzione Python, 760 00:40:25,710 --> 00:40:35,130 così possiamo chiamare strftime, ST-RF-tempo, e si può passare nella stringa di formato 761 00:40:35,130 --> 00:40:37,064 che si desidera stampare i dati in. 762 00:40:37,064 --> 00:40:39,980 Quindi è abbastanza piacevole è che si può in realtà chiamare questa funzione Python 763 00:40:39,980 --> 00:40:41,090 dal di dentro qui. 764 00:40:41,090 --> 00:40:44,370 Non dovete fare la formattazione su il lato controllo, perché in realtà, 765 00:40:44,370 --> 00:40:47,770 formattazione della data è qualcosa che si vuole affrontare all'interno della vista. 766 00:40:47,770 --> 00:40:51,480 >> E tutti questi cento le cose non è super importante. 767 00:40:51,480 --> 00:40:55,270 Se si guarda la documentazione per la funzione strftime in Python, 768 00:40:55,270 --> 00:40:57,040 specifica tutti questi le cose, ma che di 769 00:40:57,040 --> 00:40:59,190 come, quando stavamo cercando nella home page qui, 770 00:40:59,190 --> 00:41:04,440 formatta questo con una bella la data, e specifica AM o PM, 771 00:41:04,440 --> 00:41:09,410 ma normalmente, se non ha avuto questo qui, 772 00:41:09,410 --> 00:41:14,024 probabilmente otterrete alcuni spazzatura data che non sembrava molto buono. 773 00:41:14,024 --> 00:41:15,940 E poi specifichiamo il post.text, e ho potuto 774 00:41:15,940 --> 00:41:19,460 hanno messo un paio di interruzioni di riga qui, appena 775 00:41:19,460 --> 00:41:21,820 di mettere alcuni spazi tra ogni post. 776 00:41:21,820 --> 00:41:26,270 >> Quindi, penso che il più importante cosa in questo esempio, 777 00:41:26,270 --> 00:41:28,697 è che è possibile utilizzare questo ciclo for. 778 00:41:28,697 --> 00:41:30,780 E questo è analogo a cose che si possono fare in PHP. 779 00:41:30,780 --> 00:41:32,905 È possibile scorrere, tutto viene passato a, 780 00:41:32,905 --> 00:41:36,719 e così, invece di dover fare copia / incolla, copia / incolla tutto il codice HTML, 781 00:41:36,719 --> 00:41:40,010 basta scrivere una volta, e poi è possibile iterare su tutti i posti. 782 00:41:40,010 --> 00:41:41,510 >> E questo è qualcosa comune che si desidera 783 00:41:41,510 --> 00:41:44,510 a fare, quando si hanno un sacco di dati, è che per tutto nei dati, 784 00:41:44,510 --> 00:41:48,370 si vuole fare una cosa simile. 785 00:41:48,370 --> 00:41:51,690 E poi, bisogna ricordare, che quando si consiglia di stampare qualcosa esplicitamente 786 00:41:51,690 --> 00:41:54,780 nel codice HTML, si utilizza la doppia parentesi qui, 787 00:41:54,780 --> 00:41:57,820 ma poi quando si desidera specificare alcune informazioni su una condizione, 788 00:41:57,820 --> 00:42:02,430 o di un ciclo for, è utilizzare il supporto per cento. 789 00:42:02,430 --> 00:42:08,730 >> Quindi, tornando al Python codice, in modo che spiega 790 00:42:08,730 --> 00:42:12,242 cosa sta succedendo nella principale percorso, quando ci andiamo, 791 00:42:12,242 --> 00:42:14,450 visualizza solo tutto il messaggi, ma allora la domanda 792 00:42:14,450 --> 00:42:17,440 è, come possiamo effettivamente ottenere messaggi nel database, che 793 00:42:17,440 --> 00:42:18,970 è un po 'più interessante. 794 00:42:18,970 --> 00:42:23,960 >> Così, quando si fa clic sul nuovo Messaggio collegamento, che abbiamo visto qui, 795 00:42:23,960 --> 00:42:26,000 vi reindirizza a questa forma. 796 00:42:26,000 --> 00:42:29,580 E questo è solo una semplice chiamata al Funzione render_template, che poi 797 00:42:29,580 --> 00:42:32,110 passa nel nuovo incarico in forma HTML. 798 00:42:32,110 --> 00:42:36,212 Quindi, diamo uno sguardo a questo. 799 00:42:36,212 --> 00:42:37,420 Quindi questo è abbastanza semplice. 800 00:42:37,420 --> 00:42:45,110 Ha una semplice form HTML, che cercherà un po 'familiare, 801 00:42:45,110 --> 00:42:47,380 sulla base delle forme in CS50 Finanza. 802 00:42:47,380 --> 00:42:49,940 E così, specifichiamo qui, l'azione. 803 00:42:49,940 --> 00:42:52,435 E qui, se si sta lavorando con PHP, normalmente, 804 00:42:52,435 --> 00:42:55,930 sarebbe qualcosa di simile, create.php, ma qui 805 00:42:55,930 --> 00:42:59,960 abbiamo effettivamente specifichiamo un percorso all'interno del server Flask. 806 00:42:59,960 --> 00:43:02,520 E così, questo asse corrisponde per creare il percorso 807 00:43:02,520 --> 00:43:05,680 che abbiamo qui, che andremo in in un secondo. 808 00:43:05,680 --> 00:43:07,630 >> E così, si precisa che si tratta di un metodo post, 809 00:43:07,630 --> 00:43:09,820 perché vogliamo trasmettere questi dati modulo, e di solito 810 00:43:09,820 --> 00:43:12,945 quando si sta inviando i dati da un modulo, si potrebbe desiderare di utilizzare una richiesta POST, 811 00:43:12,945 --> 00:43:15,760 solo così non si finisce con questo grosso, URL ingombrante. 812 00:43:15,760 --> 00:43:18,970 Ma si potrebbe anche utilizzare una richiesta GET, e passare con il routing variabili, 813 00:43:18,970 --> 00:43:21,170 ma per le forme, è bello ad una richiesta post qui. 814 00:43:21,170 --> 00:43:24,620 E così poi, proprio come te farebbe con HTML e PHP, 815 00:43:24,620 --> 00:43:28,420 è possibile specificare questi ingressi di testo, ed è possibile specificare il nome di loro, 816 00:43:28,420 --> 00:43:33,490 e questo è il nome che andranno passati nell'oggetto richiesta entro Flask. 817 00:43:33,490 --> 00:43:36,960 >> E poi abbiamo una Invia pulsante che dice Post. 818 00:43:36,960 --> 00:43:40,760 E qui, Post è il nome del Pulsante, perché è un post sul blog, 819 00:43:40,760 --> 00:43:42,700 ma qui, post è il metodo di richiesta. 820 00:43:42,700 --> 00:43:47,060 Così quelli sono la stessa parola ma in realtà non correlato. 821 00:43:47,060 --> 00:43:48,460 Sì 822 00:43:48,460 --> 00:43:54,800 >> Tornando al codice Python, quando abbiamo chiamato il metodo di creare, 823 00:43:54,800 --> 00:43:57,702 noterà qui che si può in realtà specifica all'interno della rotta 824 00:43:57,702 --> 00:44:00,650 i metodi di richiesta che si desidera accettare, 825 00:44:00,650 --> 00:44:04,770 e ecco, Preciso che io solo vuole accettare un metodo POST. 826 00:44:04,770 --> 00:44:09,800 Quindi, se ho effettivamente provato a visitare la pagina direttamente, che sta utilizzando una richiesta GET, 827 00:44:09,800 --> 00:44:11,700 essa mi dirà "metodo non consentito." 828 00:44:11,700 --> 00:44:15,840 >> E così, si dispone di pagine, un po 'come questa pagina creare, che sono solo 829 00:44:15,840 --> 00:44:20,192 davvero utilizzando come un modo per il modulo per ottenere presentato, 830 00:44:20,192 --> 00:44:22,900 è possibile specificare che non lo fai vogliono persone siano in grado di andare lì 831 00:44:22,900 --> 00:44:25,650 direttamente attraverso una richiesta GET, o se non volevi, 832 00:44:25,650 --> 00:44:28,580 per qualche motivo, una richiesta POST, si può solo specificare GET qui, 833 00:44:28,580 --> 00:44:32,720 ma in questo esempio, abbiamo appena vuole la richiesta Inserisci di uscire. 834 00:44:32,720 --> 00:44:38,700 >> Così, quando create_post viene chiamato, quando visitiamo che tramite la richiesta Post, 835 00:44:38,700 --> 00:44:43,600 ogni volta che si va in un particolare percorso, c'è questo oggetto di richiesta, 836 00:44:43,600 --> 00:44:46,640 e abbiamo dovuto importare richieste al vertice, 837 00:44:46,640 --> 00:44:49,640 ma c'è questa richiesta oggetto che viene passato in, 838 00:44:49,640 --> 00:44:53,210 ed è possibile accedere ai dati del modulo, che verrà automaticamente riempirsi 839 00:44:53,210 --> 00:44:55,070 quando si invia una richiesta da un modulo. 840 00:44:55,070 --> 00:44:56,990 >> E poi, quello che penso è davvero cool, è 841 00:44:56,990 --> 00:45:02,840 che l'oggetto modulo per ottenere passato in, è solo un dizionario Python che 842 00:45:02,840 --> 00:45:10,560 contiene, se access-- ecco, lasciare mi tiri su il codice HTML accanto ad essa, solo 843 00:45:10,560 --> 00:45:17,670 così si può avere che come riferimento, sì, così 844 00:45:17,670 --> 00:45:21,060 i nomi che specifichiamo qui per i diversi campi, quindi 845 00:45:21,060 --> 00:45:23,900 il titolo e il testo, abbiamo poi basta usare quelli qui 846 00:45:23,900 --> 00:45:27,110 come indici nelle dati del modulo. 847 00:45:27,110 --> 00:45:28,950 Ecco, questo è super conveniente. 848 00:45:28,950 --> 00:45:33,320 >> Allora chiamiamo post.create, che creerà e inserire automaticamente 849 00:45:33,320 --> 00:45:36,850 questo nuovo oggetto postale nel database. 850 00:45:36,850 --> 00:45:40,690 E penso che questa funzione crea ecco un esempio di come davvero cool 851 00:45:40,690 --> 00:45:44,900 potente Flask sta lavorando e con questo, perché se si stesse facendo qualcosa 852 00:45:44,900 --> 00:45:48,660 in PHP, potrebbe essere necessario fare un sacco di convalida, 853 00:45:48,660 --> 00:45:51,730 si dovrà poi stabilire una connessione al database, 854 00:45:51,730 --> 00:45:55,210 si dovrà poi eseguire la query SQL, 855 00:45:55,210 --> 00:45:59,550 ma qui dobbiamo solo questa bella post.create, che possiamo poi basta 856 00:45:59,550 --> 00:46:01,520 ottenere le informazioni fuori dell'oggetto richiesta, 857 00:46:01,520 --> 00:46:05,370 e poi passare in un nuovo Post che stiamo creando. 858 00:46:05,370 --> 00:46:07,850 >> E poi, l'ultimo cosa che vogliamo fare, 859 00:46:07,850 --> 00:46:09,630 è quello di reindirizzare la torna utente per la casa. 860 00:46:09,630 --> 00:46:13,020 E così usiamo questo Flask redirect funzione. 861 00:46:13,020 --> 00:46:17,770 E qualcosa che non aveva visto prima, era questa funzione URL. 862 00:46:17,770 --> 00:46:21,970 Così l'URL per funzione consente si passa in realtà il nome 863 00:46:21,970 --> 00:46:26,090 di una funzione nel codice Python, piuttosto che il percorso particolare 864 00:46:26,090 --> 00:46:26,720 che sta. 865 00:46:26,720 --> 00:46:32,107 >> Così ho potuto avere altrettanto facilmente reindirizzato a un utente di tagliare, 866 00:46:32,107 --> 00:46:37,050 che rispedirlo a casa, ma utilizzando l'URL per la funzione è bello, 867 00:46:37,050 --> 00:46:39,990 perché se si modifica il luogo in cui le cose sono, 868 00:46:39,990 --> 00:46:44,080 quindi diciamo che cambio il casa per essere in / home invece, 869 00:46:44,080 --> 00:46:47,040 questo sarebbe ancora poi tornare / home, perché in realtà va e guarda in alto 870 00:46:47,040 --> 00:46:50,770 il nome della funzione, e vi restituirà l'URL per questo. 871 00:46:50,770 --> 00:46:52,490 >> Quindi, una sorta di sulla presupposto che sei 872 00:46:52,490 --> 00:46:55,489 più propensi a cambiare le cose in cui sono, oltre i nomi delle funzioni. 873 00:46:55,489 --> 00:46:58,840 È possibile utilizzare questo davvero bello URL per la funzione. 874 00:46:58,840 --> 00:47:02,470 E una cosa da tenere presente che è un po 'difficile, 875 00:47:02,470 --> 00:47:05,750 è che si pensa si poteva solo chiamare reindirizzare sull'URL per, 876 00:47:05,750 --> 00:47:10,600 ma in realtà tutti i percorsi sono per restituire una sorta di testo e HTML, 877 00:47:10,600 --> 00:47:14,360 così realmente dovete restituire la chiamata di reindirizzamento. 878 00:47:14,360 --> 00:47:18,379 In caso contrario, si otterrà qualcosa invalido di non restituendo una stringa, 879 00:47:18,379 --> 00:47:21,420 perché tutti questi hanno per tornare il codice HTML si vuole realmente il rendering. 880 00:47:21,420 --> 00:47:26,980 >> E così, quando si chiama il reindirizzamento, che reindirizza alla pagina 881 00:47:26,980 --> 00:47:30,270 ma restituisce in realtà il codice HTML è necessario eseguire tale reindirizzamento. 882 00:47:30,270 --> 00:47:34,430 883 00:47:34,430 --> 00:47:37,110 Torna alla homepage. 884 00:47:37,110 --> 00:47:39,200 Così abbiamo questi due punti di vista differenti. 885 00:47:39,200 --> 00:47:40,132 Noi abbiamo la vista a casa. 886 00:47:40,132 --> 00:47:41,590 O, credo che dovrei dire i modelli. 887 00:47:41,590 --> 00:47:44,190 Abbiamo questi due modelli, il modello di casa, che 888 00:47:44,190 --> 00:47:48,500 visualizza tutti i nostri post, e poi abbiamo questo annuncio cosa, 889 00:47:48,500 --> 00:47:52,970 e quando si fa clic sul post, va in un percorso all'interno della Flask, 890 00:47:52,970 --> 00:47:55,920 ma questa strada non lo fa necessariamente disporre di un modello corrispondente. 891 00:47:55,920 --> 00:47:59,290 892 00:47:59,290 --> 00:48:01,560 Non è necessario vedere qualsiasi cosa, ma è ancora possibile 893 00:48:01,560 --> 00:48:04,090 ha questo lavoro in corso dietro le quinte. 894 00:48:04,090 --> 00:48:07,450 E poi si ottiene reindirizzato tornare alla home page. 895 00:48:07,450 --> 00:48:12,230 E sicuramente, è facile da lavorare in qualche CSS più bello nel modello 896 00:48:12,230 --> 00:48:15,580 e fanno di questo aspetto molto più gradevole, ma tutta la logica principale 897 00:48:15,580 --> 00:48:18,590 c'è in Python. 898 00:48:18,590 --> 00:48:20,020 >> Tutte le domande circa l'esempio? 899 00:48:20,020 --> 00:48:22,760 So che ci sono un sacco di cose diverse succedendo lì, 900 00:48:22,760 --> 00:48:25,341 un sacco di cose che non avevamo visto prima, ma come niente. 901 00:48:25,341 --> 00:48:25,840 Già. 902 00:48:25,840 --> 00:48:28,346 >> PUBBLICO 1: Dovete fare qualcosa speciale per fregare i dati che sono 903 00:48:28,346 --> 00:48:29,600 provenienti dalla forma? 904 00:48:29,600 --> 00:48:31,109 Ho notato che hai appena detto "creare" 905 00:48:31,109 --> 00:48:33,900 EZRA Zigmond: Sì, così che è in realtà, questo è davvero un buon punto. 906 00:48:33,900 --> 00:48:36,350 Quindi la domanda era, si fa bisogno di controllare e fare in modo 907 00:48:36,350 --> 00:48:39,190 che i dati sono validi, e fare qualsiasi tipo di lavaggio 908 00:48:39,190 --> 00:48:41,840 fare in modo che esso sia valido, perché, come potete vedere qui, 909 00:48:41,840 --> 00:48:42,660 Non sto facendo questo. 910 00:48:42,660 --> 00:48:48,140 Quindi vediamo cosa succede se inserisco qualcosa vuoto. 911 00:48:48,140 --> 00:48:51,190 Quindi, sarà in realtà solo fare una posto vuoto e compilare il DateTime. 912 00:48:51,190 --> 00:48:55,990 >> Quindi, in realtà, si sarebbe probabilmente voglia di fare qualcosa di simile, 913 00:48:55,990 --> 00:49:04,749 forse specificare se il titolo è uguale a la stringa vuota, allora non farlo. 914 00:49:04,749 --> 00:49:07,290 Oppure, farlo solo se il titolo è non uguale alla stringa vuota. 915 00:49:07,290 --> 00:49:10,330 Quindi in realtà non automaticamente prendersi cura di questo lavaggio 916 00:49:10,330 --> 00:49:12,820 per voi, quindi è ancora necessario farlo. 917 00:49:12,820 --> 00:49:14,330 Sì, buona domanda. 918 00:49:14,330 --> 00:49:18,497 >> PUBBLICO 2: Does it scrub per iniezioni sequel? 919 00:49:18,497 --> 00:49:19,890 Lo sai? 920 00:49:19,890 --> 00:49:22,830 >> EZRA Zigmond: Speriamo, peewee fa. 921 00:49:22,830 --> 00:49:25,830 Penso che sarebbe certamente una bella male biblioteca, se non l'ha fatto. 922 00:49:25,830 --> 00:49:29,511 923 00:49:29,511 --> 00:49:32,690 Non lo so esattamente. 924 00:49:32,690 --> 00:49:34,820 Avrei dovuto guardare il query che ha generato. 925 00:49:34,820 --> 00:49:38,980 Penso che, se ho digitato in un post sul blog che genere di sguardo 926 00:49:38,980 --> 00:49:46,370 come un attacco di SQL injection, qualcosa di simile, se questo 927 00:49:46,370 --> 00:49:49,370 è come un campo password o qualcosa, si potrebbe fare qualcosa di simile. 928 00:49:49,370 --> 00:49:53,410 >> Penso che sarà ancora ottenere postato letteralmente, 929 00:49:53,410 --> 00:49:59,200 ma penso che peewee fa fare una sorta di lavaggio dei dati 930 00:49:59,200 --> 00:50:01,680 prima che effettivamente esegue. 931 00:50:01,680 --> 00:50:04,510 >> PUBBLICO 1: Questo campo di testo è progettato per prendere testo normale, giusto? 932 00:50:04,510 --> 00:50:05,710 >> EZRA Zigmond: Sì, lo è. 933 00:50:05,710 --> 00:50:06,465 Già. 934 00:50:06,465 --> 00:50:09,590 Quindi penso che tutto il, quindi questo è comportamento corretto, che lo farà, 935 00:50:09,590 --> 00:50:12,170 ma penso che peewee fa si spera fare 936 00:50:12,170 --> 00:50:13,780 una sorta di protezione sulla loro estremità. 937 00:50:13,780 --> 00:50:16,090 E se si voleva doppio controllo che, ci 938 00:50:16,090 --> 00:50:19,530 sono modi quando si genera una query. 939 00:50:19,530 --> 00:50:22,622 in modo da non dover eseguirlo direttamente. 940 00:50:22,622 --> 00:50:24,330 Avrei dovuto prendere un guardare la documentazione, 941 00:50:24,330 --> 00:50:27,930 ma si può effettivamente visualizzare la SQL che sta generando, 942 00:50:27,930 --> 00:50:30,840 e dare un'occhiata a questo, e fare Assicurarsi che fuoriesce cose. 943 00:50:30,840 --> 00:50:33,700 >> Un'altra ragione per cui si potrebbe vuole guardare SQL 944 00:50:33,700 --> 00:50:37,920 che Peewee è l'output, è se le cose sembrano andare molto lentamente, 945 00:50:37,920 --> 00:50:41,090 si può dare un'occhiata e vedere di cosa si tratta in realtà facendo, perché è a volte 946 00:50:41,090 --> 00:50:44,670 facile aggiungere accidentalmente in, il modo in cui si scrive, 947 00:50:44,670 --> 00:50:47,880 si può avere accidentalmente selezionare l'intero database prima, 948 00:50:47,880 --> 00:50:50,230 e poi fare qualche operazione di ordinamento su questo, quando si ha realmente 949 00:50:50,230 --> 00:50:51,320 lo scopo di selezionare un sottoinsieme. 950 00:50:51,320 --> 00:50:53,560 >> E così, se le cose non sono piuttosto andando a destra, 951 00:50:53,560 --> 00:50:57,300 è bene dare uno sguardo a richiesta Che in realtà è sempre generato. 952 00:50:57,300 --> 00:50:57,800 Già. 953 00:50:57,800 --> 00:51:02,100 >> PUBBLICO 2: Quando hai iniziato, si mette in porto nel 5000. 954 00:51:02,100 --> 00:51:02,904 >> EZRA Zigmond: Sì. 955 00:51:02,904 --> 00:51:06,070 PUBBLICO 2: E 'il default con peewee, o è qualcosa che si può cambiare? 956 00:51:06,070 --> 00:51:10,870 EZRA Zigmond: Sì, in modo che il porta è predefinita con la boccetta. 957 00:51:10,870 --> 00:51:13,061 Se si esegue senza specificando nulla, 958 00:51:13,061 --> 00:51:14,310 lo farà automaticamente. 959 00:51:14,310 --> 00:51:16,060 Credo, avrei per controllare due volte questo, 960 00:51:16,060 --> 00:51:19,130 ma è possibile specificare che nella app.run, Penso che si possa fare qualcosa di simile, 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 Diamo che una prova reale veloce. 964 00:51:23,750 --> 00:51:29,100 965 00:51:29,100 --> 00:51:32,230 Sì, così si può semplicemente specificare port = 8080, e verrà eseguito lì, 966 00:51:32,230 --> 00:51:36,130 che credo, se si voleva eseguirlo sul IDE, non ho provato questo fuori, 967 00:51:36,130 --> 00:51:38,527 ma credo che se si corse che sulla porta 8080, 968 00:51:38,527 --> 00:51:40,360 si sarebbe probabilmente in grado per accedere al server, 969 00:51:40,360 --> 00:51:41,870 proprio come se fossi per il sito web. 970 00:51:41,870 --> 00:51:44,390 >> Sì, ma è facile per cambiare la situazione, se si 971 00:51:44,390 --> 00:51:48,540 avere alcun tipo di come port-forwarding cose che dovete fare. 972 00:51:48,540 --> 00:51:50,410 >> Qualsiasi altra domanda? 973 00:51:50,410 --> 00:51:50,916 Sì? 974 00:51:50,916 --> 00:51:53,416 PUBBLICO 1: Allora, ho visto nella tua modelli che, come lei ha ricordato, 975 00:51:53,416 --> 00:51:55,647 è necessario specificare il database per ciascun oggetto. 976 00:51:55,647 --> 00:51:58,105 Ti capita di sapere, non che lo rendono davvero facile se si 977 00:51:58,105 --> 00:52:03,210 hanno un sacco di database SQLite che si vuole utilizzare per una singola applicazione web, 978 00:52:03,210 --> 00:52:07,210 che si può semplicemente specificare un mucchio di quelli diversi nel modello? 979 00:52:07,210 --> 00:52:11,620 >> EZRA Zigmond: Sì, mi permetta aprire che fino reale veloce. 980 00:52:11,620 --> 00:52:17,570 Quindi, stai dicendo, se si vuole avere un mucchio di diverso qualcosa, forse 981 00:52:17,570 --> 00:52:22,670 come e gli studenti, per alcuni ragione, qualcosa del genere? 982 00:52:22,670 --> 00:52:26,870 Sì, così penso che ancora, ogni modello 983 00:52:26,870 --> 00:52:30,652 avrebbe dovuto avere ancora solo un database assegnatole, 984 00:52:30,652 --> 00:52:32,610 ma se si voleva avere modelli diversi 985 00:52:32,610 --> 00:52:35,818 sono oggetti di database diversi assegnato ad esso, si potrebbe sicuramente fare. 986 00:52:35,818 --> 00:52:43,070 Quindi, se ho creato un nuovo, qualcosa come questo, 987 00:52:43,070 --> 00:52:47,000 e ora questo è uno studente che sembra stranamente come un post sul blog, 988 00:52:47,000 --> 00:52:49,390 Ho potuto specificare che il database è pari a db_2 qui. 989 00:52:49,390 --> 00:52:51,390 Quindi, penso che sia il via principale si può fare. 990 00:52:51,390 --> 00:52:54,560 991 00:52:54,560 --> 00:52:56,200 >> Raffreddare. 992 00:52:56,200 --> 00:52:58,410 Qualsiasi altra domanda? 993 00:52:58,410 --> 00:53:02,170 >> Quindi, solo per finire un po ' bit, qui ci sono alcune risorse, 994 00:53:02,170 --> 00:53:06,030 e queste diapositive saranno pubblicate on-line così si può effettivamente arrivare a questi collegamenti. 995 00:53:06,030 --> 00:53:08,500 Le migliori risorse sono davvero la documentazione per Flask 996 00:53:08,500 --> 00:53:09,930 e Peewee stessi. 997 00:53:09,930 --> 00:53:12,940 Sono scritte molto bene, credo. 998 00:53:12,940 --> 00:53:18,180 Così, il sito Flask è qui, e hanno un tutorial quickstart che 999 00:53:18,180 --> 00:53:20,710 cammineranno attraverso simile cose da quello che ho camminato attraverso, 1000 00:53:20,710 --> 00:53:23,560 ma se volete qualsiasi tipo di recensione delle cose che sono andato oltre, 1001 00:53:23,560 --> 00:53:26,200 o si pensava che ho spiegato qualcosa in modo confuso, 1002 00:53:26,200 --> 00:53:28,390 avranno esempi simili lì. 1003 00:53:28,390 --> 00:53:31,570 >> Peewee ha una documentazione, e hanno un tutorial quickstart 1004 00:53:31,570 --> 00:53:34,650 che va oltre i parametri principali che si desidera utilizzare. 1005 00:53:34,650 --> 00:53:38,900 Così, le cose che ho parlato con le uniche, e specificando le impostazioni predefinite, 1006 00:53:38,900 --> 00:53:42,710 i diversi tipi di campi è possibile utilizzare, quelli tutto sarebbe lì. 1007 00:53:42,710 --> 00:53:44,690 >> Inoltre, se avete domande su peewee, 1008 00:53:44,690 --> 00:53:47,530 e che pubblichi su StackOverflow, il ragazzo che ha fatto realmente peewee 1009 00:53:47,530 --> 00:53:49,500 va avanti e risposte quelle volte. 1010 00:53:49,500 --> 00:53:53,200 Se avete una domanda, si spera egli sarà in grado di rispondere, 1011 00:53:53,200 --> 00:53:54,867 perché ha scritto il tutto. 1012 00:53:54,867 --> 00:53:56,700 Penso che sia tutto Volevo coprire. 1013 00:53:56,700 --> 00:53:58,930 Grazie per essere venuti. 1014 00:53:58,930 --> 00:54:02,688