1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:03,227 [Jouer de la musique] 3 00:00:03,227 --> 00:00:04,705 4 00:00:04,705 --> 00:00:05,830 EZRA Zigmond: Salut, tout le monde. 5 00:00:05,830 --> 00:00:08,020 Merci d'être venus aujourd'hui. 6 00:00:08,020 --> 00:00:10,660 Ce séminaire est "Python Web Apps avec Flask ". 7 00:00:10,660 --> 00:00:14,510 >> Donc, je vais parler un peu pourquoi 8 00:00:14,510 --> 00:00:17,400 vous pourriez vouloir utiliser Flacon à faire applications web avec Python, par opposition 9 00:00:17,400 --> 00:00:21,556 à d'autres cadres, comme là-bas Django, qui est le plus connu. 10 00:00:21,556 --> 00:00:24,330 Le sous-titre est "et peewee, "qui est quelque chose 11 00:00:24,330 --> 00:00:27,250 nous allons parler de la façon d'interagir avec les bases de données SQL. 12 00:00:27,250 --> 00:00:29,610 Il rend vraiment agréable. 13 00:00:29,610 --> 00:00:32,390 >> Donc, voici juste un rapide aperçu de ce que je veux aller plus. 14 00:00:32,390 --> 00:00:35,520 Donc, d'abord, juste une diapositive que ça va être QuickStart, 15 00:00:35,520 --> 00:00:38,530 qui est de savoir comment obtenir tout mettre en place sur votre ordinateur. 16 00:00:38,530 --> 00:00:41,760 Je vais être la démonstration ce sur ma machine Mac local, 17 00:00:41,760 --> 00:00:45,220 juste parce que ce où je l'ai fait avant, je suis plus à l'aise avec elle, 18 00:00:45,220 --> 00:00:48,510 mais cela est certainement possible sur le CD50 IDE. 19 00:00:48,510 --> 00:00:52,050 >> Donc, après cela, je veux introduire ce flacon est, 20 00:00:52,050 --> 00:00:55,089 et vous convaincre pourquoi vous devriez l'utiliser en premier lieu. 21 00:00:55,089 --> 00:00:56,880 Ensuite, je vais vous donner un rapide exemple de ce que vous 22 00:00:56,880 --> 00:01:00,550 peut faire dans un ballon, un exemple rapide de ce que vous pouvez faire dans peewee, 23 00:01:00,550 --> 00:01:05,010 et puis je vais vous montrer plus exemple d'application complète 24 00:01:05,010 --> 00:01:07,520 que je mets ensemble que nous peut traverser ensemble. 25 00:01:07,520 --> 00:01:10,040 >> Et puis enfin, dans la dernière diapositive, je dois 26 00:01:10,040 --> 00:01:12,730 quelques ressources que vous regardez à en ligne pour plus d'informations. 27 00:01:12,730 --> 00:01:15,560 Ceci est un pas complet tutorial de comment utiliser Flask. 28 00:01:15,560 --> 00:01:18,140 Et je vais espère quitter un peu de temps pour les questions. 29 00:01:18,140 --> 00:01:21,050 Quiconque observe localement, juste comme, crier au milieu 30 00:01:21,050 --> 00:01:22,340 si vous avez des questions. 31 00:01:22,340 --> 00:01:27,150 >> Donc, des trucs d'installation rapide, si vous voulez suivre, 32 00:01:27,150 --> 00:01:29,240 ou si vous voulez obtenir ce sur votre propre machine, 33 00:01:29,240 --> 00:01:32,440 Je vais être en utilisant Python 2.7.10. 34 00:01:32,440 --> 00:01:35,860 Flacon fonctionne avec Python 3, mais je l'aime 35 00:01:35,860 --> 00:01:38,660 l'utilisation de Python 2, parce qu'il ya certains paquets Python qui 36 00:01:38,660 --> 00:01:40,910 ne fonctionnent pas avec 3 encore. 37 00:01:40,910 --> 00:01:44,800 Si vous avez installé PIP, qui est un gestionnaire de paquets Python, 38 00:01:44,800 --> 00:01:48,190 Je pense que si votre Python est supérieure ou égale à 2.7.9, 39 00:01:48,190 --> 00:01:52,220 vous avez déjà installé, il est super facile à installer ces paquets. 40 00:01:52,220 --> 00:01:54,990 >> Vous pouvez faire installer pip Flacon, PIP installer peewee, 41 00:01:54,990 --> 00:01:58,600 Habituellement, vous devez exécuter sudo juste afin que les autorisations fonctionné. 42 00:01:58,600 --> 00:02:01,080 Et, si vous utilisez un Super ancienne version de Python, 43 00:02:01,080 --> 00:02:05,100 Je vous recommande de mettre à jour votre Python, ou en utilisant EasyInstall installer pip. 44 00:02:05,100 --> 00:02:09,180 45 00:02:09,180 --> 00:02:11,120 Donc, la prochaine question est, ce qui est Flask? 46 00:02:11,120 --> 00:02:13,280 Et je suppose, d'abord une question raisonnable, je me demandais 47 00:02:13,280 --> 00:02:15,585 pendant une longue période est, ce qui est une application web? 48 00:02:15,585 --> 00:02:17,960 Parce que ce un mot que je Think est jeté autour d'un lot 49 00:02:17,960 --> 00:02:19,240 que je ne sais pas vraiment. 50 00:02:19,240 --> 00:02:22,340 Et je pense que le meilleur exemple de ce qu'une application Web est, 51 00:02:22,340 --> 00:02:26,960 est vraiment CS50 Finances, où il est pas vraiment juste un site web, 52 00:02:26,960 --> 00:02:29,320 mais il est quelque chose que vous pourraient sorte d'interagir avec. 53 00:02:29,320 --> 00:02:31,736 Il ya des comptes d'utilisateurs et toutes sortes de choses différentes. 54 00:02:31,736 --> 00:02:35,010 Alors, où vous dessinez exactement le la ligne entre ce qui est un site web, 55 00:02:35,010 --> 00:02:38,780 et ce qui est une application web, est une sorte de arbitraire, mais je suppose que l'idée, 56 00:02:38,780 --> 00:02:42,110 il est quelque chose de plus qu'un site web et il est une application utile. 57 00:02:42,110 --> 00:02:46,081 >> Donc, Flask est un cadre pour faire des applications Web en utilisant Python. 58 00:02:46,081 --> 00:02:48,330 Et nous espérons que, d'ici la fin de cela, je vais vous convaincre 59 00:02:48,330 --> 00:02:52,210 que vous pouvez réellement écrire quelque chose comme CS50 Finance utilisant Python, que je 60 00:02:52,210 --> 00:02:53,950 comme beaucoup mieux que PHP, personnellement. 61 00:02:53,950 --> 00:02:57,320 >> Donc, Flask est, qu'ils appellent une microframework, par lequel, 62 00:02:57,320 --> 00:02:59,800 ils signifient qu'il est très simple, mais extensible. 63 00:02:59,800 --> 00:03:02,980 Ainsi, il a ce qu'il vous faut, mais si vous voulez plus de fonctionnalités, 64 00:03:02,980 --> 00:03:04,522 il est facile de les mettre en. 65 00:03:04,522 --> 00:03:06,480 Mais juste parce qu'il est un microframework, qui ne fonctionne pas 66 00:03:06,480 --> 00:03:08,960 signifie qu'il est seulement pour les petits projets. 67 00:03:08,960 --> 00:03:12,590 Je dois ici un lien qui dit que Obama a utilisé Flacon en 2012 68 00:03:12,590 --> 00:03:14,410 pour sa campagne site, qui nous l'espérons, 69 00:03:14,410 --> 00:03:16,937 est quelque chose d'un avenant. 70 00:03:16,937 --> 00:03:18,770 Mais la chose que je vraiment à propos de Flasque 71 00:03:18,770 --> 00:03:22,401 est que, il ne fait pas vraiment toute sorte de décisions pour vous. 72 00:03:22,401 --> 00:03:24,150 Tout simplement parce que nous sommes parler des applications web, 73 00:03:24,150 --> 00:03:26,940 Je dois le comparer à Ruby on Rails et Django, qui tous deux 74 00:03:26,940 --> 00:03:30,450 sont de grands cadres, mais ils font tous deux hypothèses 75 00:03:30,450 --> 00:03:33,600 sur la façon dont vous voulez interagir avec des bases de données, 76 00:03:33,600 --> 00:03:36,900 comment vous voulez présenter votre vues, et ils ne sont certainement 77 00:03:36,900 --> 00:03:38,850 bons aspects. 78 00:03:38,850 --> 00:03:41,490 >> Par exemple, Ruby on Rails a ce système d'enregistrement actif, 79 00:03:41,490 --> 00:03:43,100 ce qui est une très belle moyen d'interagir avec les données, 80 00:03:43,100 --> 00:03:45,960 mais si vous souhaitez utiliser Ruby on Rails, vous êtes en quelque sorte liés à cela. 81 00:03:45,960 --> 00:03:47,835 Mais avec Flask, que je vais vous montrer avec peewee, 82 00:03:47,835 --> 00:03:49,830 vous pouvez utiliser quel qu'il soit de base de données que vous voulez, 83 00:03:49,830 --> 00:03:53,980 et vous pouvez simplement tirer que dans comme une extension dans le flacon. 84 00:03:53,980 --> 00:03:56,350 >> Voilà pourquoi je vraiment comme Flask, il est qu'il 85 00:03:56,350 --> 00:04:01,170 ne pas faire des hypothèses pour vous basé sur des choses que vous ne devez pas vraiment. 86 00:04:01,170 --> 00:04:04,440 >> Alors, pourquoi devriez-vous utiliser Flask? 87 00:04:04,440 --> 00:04:08,230 Les avantages sont, il vient a vraiment les caractéristiques de base 88 00:04:08,230 --> 00:04:09,420 construit en elle que vous avez besoin. 89 00:04:09,420 --> 00:04:11,980 Donc, vous ne devez pas vous inquiéter à propos de comprendre tout un tas de choses 90 00:04:11,980 --> 00:04:13,175 que vous ne pas vraiment besoin. 91 00:04:13,175 --> 00:04:15,060 Vous ne devez pas avoir à vous soucier sur la désactivation de fonctions 92 00:04:15,060 --> 00:04:16,620 que vous ne pas vraiment besoin. 93 00:04:16,620 --> 00:04:21,082 >> Et, comme je l'ai mentionné, il est super facile d'ajouter des extensions de choses 94 00:04:21,082 --> 00:04:21,790 que vous avez besoin. 95 00:04:21,790 --> 00:04:24,700 Certains d'entre eux, a Flask leur propre soutien pour elle. 96 00:04:24,700 --> 00:04:28,230 Donc, il ya quelque chose appelé Flask admin, qui reflète cet administrateur 97 00:04:28,230 --> 00:04:32,060 panneau qui fournit Django, qui vous donne une belle façon visuelle 98 00:04:32,060 --> 00:04:33,405 pour administrer votre site web. 99 00:04:33,405 --> 00:04:35,280 Mais encore une fois, si vous êtes faire quelque chose de simple, 100 00:04:35,280 --> 00:04:39,550 vous ne probablement pas besoin d'un grand administrateur panneau, donc je pense que ce super sympa. 101 00:04:39,550 --> 00:04:45,940 Les inconvénients sont que vous avez moins de pouvoir sortir de la boîte. 102 00:04:45,940 --> 00:04:49,660 Ainsi, lorsque vous ouvrez pour la première place Flask, et dans votre programme Python, 103 00:04:49,660 --> 00:04:53,150 vous tapez juste de Flask import *, ou que ce soit, 104 00:04:53,150 --> 00:04:55,957 vous ne recevez pas exactement tous les fonctionnalités que vous voudrez peut-être. 105 00:04:55,957 --> 00:04:58,540 Et vous devez donc plus explicitement la liste des caractéristiques que vous voulez. 106 00:04:58,540 --> 00:05:01,990 Voilà donc un inconvénient, mais je pense que pour la construction de petits web 107 00:05:01,990 --> 00:05:04,782 applications comme je vais être montrant vous, qui est pas vraiment un problème. 108 00:05:04,782 --> 00:05:07,281 Et ce qui est la dernière chose censé dire, ce qui est une faute de frappe, 109 00:05:07,281 --> 00:05:10,240 est qu'il ya moins standardisée conventions pour savoir comment utiliser Flask, 110 00:05:10,240 --> 00:05:12,400 simplement parce qu'il n'y a pas autant les gens qui utilisent professionnellement 111 00:05:12,400 --> 00:05:13,191 par rapport à Django. 112 00:05:13,191 --> 00:05:16,380 Donc, si vous regardez quelque chose comme, "comment je fais x" dans Django, 113 00:05:16,380 --> 00:05:18,190 vous trouverez sans doute. 114 00:05:18,190 --> 00:05:20,260 >> Il ya une bonne conception les modèles que vous pouvez utiliser, 115 00:05:20,260 --> 00:05:22,660 mais avec Flask, il est sorte de passer votre chemin, 116 00:05:22,660 --> 00:05:24,850 simplement parce qu'il est un jolie petite bibliothèque. 117 00:05:24,850 --> 00:05:27,100 Ce sont donc les inconvénients, mais je pense que 118 00:05:27,100 --> 00:05:29,370 qu'il est toujours une bonne bibliothèque à utiliser. 119 00:05:29,370 --> 00:05:31,909 >> Alors disons simplement sauter à droite dans le flacon. 120 00:05:31,909 --> 00:05:34,200 Ceci est sûrement pas d'être un tutoriel complet, 121 00:05:34,200 --> 00:05:37,480 mais il est de vous donner une idée de la façon de structurer les choses, 122 00:05:37,480 --> 00:05:40,790 et si vous vous sentez à l'aise d'aller hors et en regardant la documentation 123 00:05:40,790 --> 00:05:42,570 et de découvrir plus. 124 00:05:42,570 --> 00:05:48,500 >> Alors, permettez-moi d'ouvrir une vraiment exemple simple au premier abord, 125 00:05:48,500 --> 00:05:50,737 et vous montrer ce que ressemble, et puis nous allons 126 00:05:50,737 --> 00:05:52,070 décomposer un peu plus. 127 00:05:52,070 --> 00:05:56,160 >> Donc cela ici, permettez-moi de le faire fonctionner. 128 00:05:56,160 --> 00:06:06,800 129 00:06:06,800 --> 00:06:09,750 Donc, je dois maintenant mon application en cours. 130 00:06:09,750 --> 00:06:15,910 Je vais ouvrir Safari, et il fonctionne sur mon hôte local. 131 00:06:15,910 --> 00:06:19,360 Donc je vais juste pour faire de ce grand. 132 00:06:19,360 --> 00:06:23,960 Mais localhost: 5000 133 00:06:23,960 --> 00:06:27,650 >> Et donc, en ce moment, tout cela ne est, lorsque vous visitez le site, 134 00:06:27,650 --> 00:06:31,490 il affiche "Bonjour Flask," qui est pas super utile, 135 00:06:31,490 --> 00:06:34,630 mais je pense qu'il est cool que dans ce petit fichier ici, 136 00:06:34,630 --> 00:06:37,390 nous avons un serveur web qui tourne qui est l'impression de quelque chose. 137 00:06:37,390 --> 00:06:40,500 Alors, regardons effectivement le code pour une seconde, 138 00:06:40,500 --> 00:06:43,080 et de le décomposer un peu. 139 00:06:43,080 --> 00:06:45,260 Est la bonne taille pour tout le monde ici? 140 00:06:45,260 --> 00:06:51,560 >> Donc, je l'espère, vous êtes un peu l'aise en utilisant Python. 141 00:06:51,560 --> 00:06:55,820 Je suppose que nous pouvons regarder Python et lire à travers elle. 142 00:06:55,820 --> 00:06:59,290 Si vous avez des questions au sujet de quoi que ce soit, je peux aussi aller sur cela. 143 00:06:59,290 --> 00:07:03,974 >> Donc, la première ligne est, de Flask, nous importons, Flacon avec un capital "F" 144 00:07:03,974 --> 00:07:06,140 qui est une sorte de tous les principales caractéristiques que vous voulez. 145 00:07:06,140 --> 00:07:08,890 Chaque fois que vous écrivez un fichier et en utilisant Flask, 146 00:07:08,890 --> 00:07:12,120 vous allez vouloir importer que, simplement parce que cela a toutes les choses principales. 147 00:07:12,120 --> 00:07:15,400 La prochaine chose que nous faisons, est que nous appeler cette fonction Flask, juste 148 00:07:15,400 --> 00:07:19,270 pour créer un objet de l'application, et vous êtes allant toujours à vouloir le faire. 149 00:07:19,270 --> 00:07:25,960 >> Et puis, sautant à la fond rapidement, cette partie est ici, 150 00:07:25,960 --> 00:07:28,760 'if_name _ == "_ main_"' qui est une sorte de convention de Python. 151 00:07:28,760 --> 00:07:32,750 Donc, cela ne fera que si vous exécutez exécuter ce fichier directement en utilisant Python. 152 00:07:32,750 --> 00:07:36,040 Ensuite, nous appeler app.run, qui sera fait démarrer l'application en cours. 153 00:07:36,040 --> 00:07:39,570 >> Donc, voilà la structure principale qui vous aurez dans toute application de Flask, 154 00:07:39,570 --> 00:07:48,550 est que vous aurez cette app = Flasque (_name_), puis app.run. 155 00:07:48,550 --> 00:07:54,940 >> Donc, les deux choses que je dois ici, sommes ce que nous appelons les routes. 156 00:07:54,940 --> 00:07:57,150 Donc, nous allons parler de l'acheminement d'un peu plus. 157 00:07:57,150 --> 00:07:58,430 Je vais revenir à la diapositive. 158 00:07:58,430 --> 00:08:02,540 >> Donc, le plus fondamental concept dans Flask est routage. 159 00:08:02,540 --> 00:08:06,750 Et il est l'idée que vous assigner des fonctions en Python 160 00:08:06,750 --> 00:08:11,280 à des adresses particulières sur votre page Web. 161 00:08:11,280 --> 00:08:13,930 Donc, chaque fois que vous voulez pour créer une nouvelle route, 162 00:08:13,930 --> 00:08:16,500 vous utilisez cette @ app.route fonction décorateur. 163 00:08:16,500 --> 00:08:19,770 Donc, si vous n'êtes pas familier avec décorateurs de fonction en Python, 164 00:08:19,770 --> 00:08:24,160 il est que ce concept vous permet de prendre une fonction 165 00:08:24,160 --> 00:08:26,800 et l'entourer avec autre chose. 166 00:08:26,800 --> 00:08:30,140 >> Alors, vraiment, ce que ce décorateur fait, est que cela prend la fonction dessous, 167 00:08:30,140 --> 00:08:33,409 et il ajoute plus d'informations à elle, mais ce qui fait Flask 168 00:08:33,409 --> 00:08:37,480 ne fait que cela se produise est pas super cruciale, mais ce qui est important, 169 00:08:37,480 --> 00:08:43,640 est que, avant la route, vous mettre ce @ app.route, puis 170 00:08:43,640 --> 00:08:46,480 l'adresse de la route, de sorte que la barre est ce que nous 171 00:08:46,480 --> 00:08:48,360 vu quand nous ouvrons juste en haut de la page Web. 172 00:08:48,360 --> 00:08:49,580 Voilà donc la page d'accueil. 173 00:08:49,580 --> 00:08:51,037 Il est juste la route de barre oblique. 174 00:08:51,037 --> 00:08:52,370 Et puis vous avez cette fonction. 175 00:08:52,370 --> 00:08:54,453 Le nom de la fonction peut être ce que vous voulez. 176 00:08:54,453 --> 00:08:56,930 Il ne doit pas nécessairement à avoir à faire avec la route. 177 00:08:56,930 --> 00:08:59,440 Et puis, quel que soit le retour de la fonction, 178 00:08:59,440 --> 00:09:01,730 la fonction doit renvoyer une chaîne. 179 00:09:01,730 --> 00:09:03,740 Et cette chaîne peut contenir du code HTML ou quoi que ce soit, 180 00:09:03,740 --> 00:09:06,920 et qui est en fait ce qui va arriver retourné à votre navigateur Web comme HTML, 181 00:09:06,920 --> 00:09:08,200 et il rendra ce. 182 00:09:08,200 --> 00:09:12,030 >> Voilà donc le même code qui était de l'exemple 183 00:09:12,030 --> 00:09:16,430 que je viens de courir, alors quand nous visitons slash, il appelle une fonction Bonjour tout le monde, ce qui 184 00:09:16,430 --> 00:09:20,470 juste renvoie une chaîne, Bonjour Flask, et que l'on imprime sur l'écran. 185 00:09:20,470 --> 00:09:27,290 >> Donc, il ya un autre exemple, qui est, quand vous visitez / bonjour, 186 00:09:27,290 --> 00:09:30,370 il imprime Bonjour Word, qui devrait en fait dire Bonjour tout le monde, 187 00:09:30,370 --> 00:09:32,010 mais supposons que ce était intentionnelle. 188 00:09:32,010 --> 00:09:35,140 Donc, nous allons tirer que jusqu'à très rapide. 189 00:09:35,140 --> 00:09:41,290 >> Donc, si vous allez à localhost / bonjour, il sera désormais imprimer quelque chose d'autre. 190 00:09:41,290 --> 00:09:45,680 Voilà donc juste un petit exemple de la façon dont vous pouvez créer deux voies différentes. 191 00:09:45,680 --> 00:09:50,630 >> Donc, autant que cela soit pas super utile, il n'y a pas beaucoup que vous pouvez faire, 192 00:09:50,630 --> 00:09:55,360 vous pourriez faire tout cela avec ayant différentes pages HTML, 193 00:09:55,360 --> 00:09:58,000 et lorsque vous visitez un particulier page, il charge simplement la page. 194 00:09:58,000 --> 00:10:00,864 Voyons donc un peu plus choses utiles que vous pouvez faire. 195 00:10:00,864 --> 00:10:03,780 Donc, une chose que vous pourriez avoir remarqué dans l'exemple que je tirai 196 00:10:03,780 --> 00:10:07,160 jusqu'à, est que je l'avais app.run (debug = True). 197 00:10:07,160 --> 00:10:09,580 Et donc, ce que cela l'argument de débogage fait, est 198 00:10:09,580 --> 00:10:14,600 que lorsque vous exécutez votre serveur Web, lorsque vous êtes dans votre application, 199 00:10:14,600 --> 00:10:18,100 si vous modifiez un fichier, il sera recharger automatiquement le serveur. 200 00:10:18,100 --> 00:10:21,160 >> Et si vous ne l'avez pas fait à redémarrage Python, ce qui est super utile. 201 00:10:21,160 --> 00:10:24,020 Je peux montrer cela. 202 00:10:24,020 --> 00:10:26,960 Permettez-moi de tirer vers le haut mon code avec la faute de frappe en elle, 203 00:10:26,960 --> 00:10:30,420 et prétendre que faute de frappe a été mis là intentionnellement à des fins instructives. 204 00:10:30,420 --> 00:10:31,625 Ajoutons donc cette avant. 205 00:10:31,625 --> 00:10:33,140 Alors maintenant, il dit Bonjour tout le monde. 206 00:10:33,140 --> 00:10:34,410 Je vais l'enregistrer. 207 00:10:34,410 --> 00:10:36,540 Et si nous nous retirons de sauvegarde le terminal, vous aurez 208 00:10:36,540 --> 00:10:39,520 dire qu'il est de redémarrer, parce qu'il a détecté une modification, 209 00:10:39,520 --> 00:10:43,620 et maintenant quand nous recharger cette page, il affichera la bonne chose. 210 00:10:43,620 --> 00:10:45,630 >> Donc débogage est super utile pour cela. 211 00:10:45,630 --> 00:10:48,740 Aussi, si vous avez une sorte d'un accident, de sorte 212 00:10:48,740 --> 00:10:54,370 permettez-moi de ce plantage de l'application en l'ayant pas retourné une chaîne. 213 00:10:54,370 --> 00:10:57,540 Donc, disons simplement avoir Aucun retour pour une raison quelconque. 214 00:10:57,540 --> 00:11:00,810 Et puis, quand je visite cette la page, il sera simplement planter, 215 00:11:00,810 --> 00:11:04,465 mais le serveur ne fait pas que planter, il vous donne en fait un retour super utile 216 00:11:04,465 --> 00:11:06,490 trace de tout ce qui a mal tourné. 217 00:11:06,490 --> 00:11:10,050 Et ce qui est vraiment agréable, est que à toute étape dans cette trace arrière, 218 00:11:10,050 --> 00:11:14,260 vous pourriez ouvrir un interactive débourser ici, et une sorte de imprimer ce 219 00:11:14,260 --> 00:11:17,780 variables que vous voulez prendre un coup d'oeil. 220 00:11:17,780 --> 00:11:21,054 >> Et si le débogage est vraiment utile pour déterminer 221 00:11:21,054 --> 00:11:23,470 ce qui se passe avec votre serveur, plutôt que de simplement voir 222 00:11:23,470 --> 00:11:28,201 quelque chose en PHP comme un 500 interne erreur de serveur, qui est super inutile. 223 00:11:28,201 --> 00:11:30,700 Une chose d'être conscient de, est que si vous mettez votre application en ligne 224 00:11:30,700 --> 00:11:34,260 il est donc visible pour le public, vous ne jamais vouloir quitter le mode de débogage sur, 225 00:11:34,260 --> 00:11:37,320 parce que les gens peuvent réellement utiliser cette console que je 226 00:11:37,320 --> 00:11:39,150 Vous avez montré à exécuter du code arbitraire. 227 00:11:39,150 --> 00:11:42,120 >> Ainsi, ils peuvent imprimer comme tout codes secrets que vous avez là, 228 00:11:42,120 --> 00:11:44,755 ils peuvent regarder exactement comment votre site fonctionne. 229 00:11:44,755 --> 00:11:46,630 Donc, il est vraiment utile pour les essais, mais toujours 230 00:11:46,630 --> 00:11:50,090 assurez-vous de le prendre avant vous publiez quelque chose en ligne. 231 00:11:50,090 --> 00:11:56,640 >> Alors, quand vous faites quelque chose comme PHP, il ya cette idée 232 00:11:56,640 --> 00:11:58,920 que vous pouvez passer informations entre les pages Web 233 00:11:58,920 --> 00:12:03,620 en mettant en fait les informations dans l'URL, ce qui est une demande GET, 234 00:12:03,620 --> 00:12:07,490 mais dans Flask, vous pouvez réellement faire quelque chose un peu comme ça, 235 00:12:07,490 --> 00:12:10,590 en ayant un parcours qui a une variable comme partie. 236 00:12:10,590 --> 00:12:14,090 >> Donc, si vous regardez ce par exemple sur l'écran ici, 237 00:12:14,090 --> 00:12:19,930 nous avons un itinéraire qui est ('/ bonjour /'), et donc, si vous visitez 238 00:12:19,930 --> 00:12:23,790 / bonjour / quelque chose, que quelque chose va effectivement se remplissent 239 00:12:23,790 --> 00:12:25,490 dans la variable nom. 240 00:12:25,490 --> 00:12:27,850 Et remarquez que la fonction qui vient avec cette route 241 00:12:27,850 --> 00:12:31,302 doit prendre dans le paramètre nommer, de sorte qu'il sera fait 242 00:12:31,302 --> 00:12:32,510 se passé dans la fonction. 243 00:12:32,510 --> 00:12:34,190 >> Et puis, une fois que vous êtes à l'intérieur de cette fonction, 244 00:12:34,190 --> 00:12:36,420 vous pouvez traiter que comme une variable python normale, 245 00:12:36,420 --> 00:12:39,650 Et alors, il sera imprimer Bonjour, et il 246 00:12:39,650 --> 00:12:42,000 remplira dans le nom à l'aide un formatage de chaîne. 247 00:12:42,000 --> 00:12:48,060 >> Donc, pour ajouter parties variables à un routage, vous utilisez le marquage équerre. 248 00:12:48,060 --> 00:12:51,220 Et éventuellement, vous pouvez utiliser ce qu'on appelle un convertisseur. 249 00:12:51,220 --> 00:12:56,840 Et donc, si vous mettez cette annotation avec le côlon, 250 00:12:56,840 --> 00:13:00,015 vous pouvez spécifier qu'il est un int ou un flotteur, ou le chemin, 251 00:13:00,015 --> 00:13:01,640 et il vous permet de convertir automatiquement. 252 00:13:01,640 --> 00:13:05,130 Vous pouvez également faire la conversion au sein de la fonction Python, 253 00:13:05,130 --> 00:13:09,710 en utilisant simplement un plâtre, mais parfois si vous voulez vous assurer qu'il est un int, 254 00:13:09,710 --> 00:13:12,080 vous pouvez mettre ce que règle de conversion là. 255 00:13:12,080 --> 00:13:15,930 >> Donc, nous allons tirer vers le haut un exemple de certaines règles variables. 256 00:13:15,930 --> 00:13:21,480 Donc, ici, cela a même base la structure avec le flacon de l'importation 257 00:13:21,480 --> 00:13:25,030 Flacon, l'app = flacon (_name_), puis elle est en marche à la fin. 258 00:13:25,030 --> 00:13:28,050 Nous avons ces deux différente itinéraires variables ici. 259 00:13:28,050 --> 00:13:29,900 Et la première, est celui que je montrais 260 00:13:29,900 --> 00:13:34,230 dans la diapositive, qui était celle il faut juste un nom de chaîne 261 00:13:34,230 --> 00:13:35,650 et il va imprimer Bonjour, Nom. 262 00:13:35,650 --> 00:13:41,410 >> Et ensuite, la seconde on utilise la conversion. 263 00:13:41,410 --> 00:13:44,690 Donc, ce sera automatiquement convertir à un int, puis doubler le int, 264 00:13:44,690 --> 00:13:46,150 et imprimer cela. 265 00:13:46,150 --> 00:13:48,220 Et, nous ne faisons pas toute sorte de conversion en son sein 266 00:13:48,220 --> 00:13:49,594 parce Flacon prend soin de cela. 267 00:13:49,594 --> 00:13:53,181 Alors soyons cette course. 268 00:13:53,181 --> 00:13:54,930 Lorsque vous avez un ballon l'application en cours, 269 00:13:54,930 --> 00:13:58,440 Vous pouvez contrôler-C hors de lui pour arrêter le serveur en marche. 270 00:13:58,440 --> 00:14:02,420 Et puis, je vais courir les variables. 271 00:14:02,420 --> 00:14:11,740 >> Allons donc à localhost / bonjour / Esdras et Espérons que ce sera de me dire bonjour. 272 00:14:11,740 --> 00:14:14,530 273 00:14:14,530 --> 00:14:20,310 >> Il a donc fallu en mon nom, dans la variable la route, et il remplit ici. 274 00:14:20,310 --> 00:14:23,950 Donc, je vais aussi montrer une rapide exemple du doublement. 275 00:14:23,950 --> 00:14:28,600 Donc, si vous allez à / double / 3, il affichera 6. 276 00:14:28,600 --> 00:14:31,440 Donc, cela a pris soin de la conversion pour nous. 277 00:14:31,440 --> 00:14:34,190 >> Ainsi, vous pouvez aussi le faire avec flotteur, et quelque chose de spécial, 278 00:14:34,190 --> 00:14:37,530 si vous avez besoin de spécifier quelque chose comme un chemin, qui lui permet d'accepter des barres obliques, 279 00:14:37,530 --> 00:14:39,155 mais cela ne devrait pas être plus souvent un problème. 280 00:14:39,155 --> 00:14:41,480 281 00:14:41,480 --> 00:14:43,820 Jusqu'à présent, nous, avons encore vient d'être de retour 282 00:14:43,820 --> 00:14:46,320 cordes, ce qui est pas très intéressant. 283 00:14:46,320 --> 00:14:48,730 >> Nous pourrions revenir chaîne HTML littérale. 284 00:14:48,730 --> 00:14:54,322 Donc, dans le code, nous pouvons insérer quelque chose comme le b-tag pour le mettre en gras, 285 00:14:54,322 --> 00:14:56,030 mais la plupart du temps vous ne veulent pas réellement 286 00:14:56,030 --> 00:14:58,420 être l'écriture de code HTML dans votre code Python. 287 00:14:58,420 --> 00:15:01,940 Cela devient vraiment salissant, et il est pas un bon moment. 288 00:15:01,940 --> 00:15:06,430 >> Flacon nous permet de séparer les HTML dans ce qu'on appelle le modèle, 289 00:15:06,430 --> 00:15:09,467 et si vous songez en termes de modèle MVC 290 00:15:09,467 --> 00:15:11,550 que vous êtes familier avec, je l'espère, de travailler 291 00:15:11,550 --> 00:15:15,520 avec CS50 Finances un peu, vous pouvez penser les fichiers Python 292 00:15:15,520 --> 00:15:19,430 comme étant plus du contrôleur, où ils interagissent avec ce que 293 00:15:19,430 --> 00:15:20,970 modèle de données que vous pourriez avoir. 294 00:15:20,970 --> 00:15:24,900 >> Et puis, ils crient à Vues et transmettre des informations à ce View 295 00:15:24,900 --> 00:15:28,120 à remplir dans l'information en HTML dont il a besoin. 296 00:15:28,120 --> 00:15:30,490 Et ce que nous appelons les Vues Modèles sont en classe. 297 00:15:30,490 --> 00:15:35,280 >> Donc Flacon utilise un autre Python module qui il sera automatiquement 298 00:15:35,280 --> 00:15:38,620 Installer lorsque vous installez PIP Flacon appelé Jinja, qui 299 00:15:38,620 --> 00:15:40,885 vous permet d'ajouter ces annotations à l'HTML 300 00:15:40,885 --> 00:15:45,140 que vous voyez sur l'écran, qui vous permet vous mettez dans des choses comme conditionnelles, 301 00:15:45,140 --> 00:15:47,230 et des boucles dans le code HTML. 302 00:15:47,230 --> 00:15:51,140 >> Donc, il semble un peu comme la façon dont vous pourrait utiliser PHP dans un fichier HTML, 303 00:15:51,140 --> 00:15:57,380 mais cela est juste quand le flacon serveur sert le fichier HTML, 304 00:15:57,380 --> 00:16:01,610 elle se déroulera ce moteur de templates et analyser à travers ce et de remplir les choses. 305 00:16:01,610 --> 00:16:06,650 Donc Flacon a une fonction de render_template que vous pouvez voir au bas ici. 306 00:16:06,650 --> 00:16:14,300 Et donc quand vous visitez cette page, il rendrait cette hello.html modèle, 307 00:16:14,300 --> 00:16:16,407 et puis de remplir cette page HTML. 308 00:16:16,407 --> 00:16:18,990 Alors disons simplement exécuter ce réel rapide, et de voir à quoi il ressemble, 309 00:16:18,990 --> 00:16:21,198 et puis je vais à travers un peu plus en détail. 310 00:16:21,198 --> 00:16:25,380 311 00:16:25,380 --> 00:16:30,260 Donc, vos modèles vont aller dans un dossier de modèles. 312 00:16:30,260 --> 00:16:33,980 Il va automatiquement chercher dans le Modèles dossier pour ce modèle. 313 00:16:33,980 --> 00:16:35,615 Donc, nous allons ouvrir cette place. 314 00:16:35,615 --> 00:16:47,350 315 00:16:47,350 --> 00:16:50,005 Donc, je vais courir l'exemple de Templating. 316 00:16:50,005 --> 00:16:52,820 317 00:16:52,820 --> 00:17:03,660 >> Donc, si je vais à / bonjour / Ezra, il a cette horrible, 318 00:17:03,660 --> 00:17:05,930 balise marquee désagréable que je mets dans. 319 00:17:05,930 --> 00:17:08,050 Très belle, très dynamique. 320 00:17:08,050 --> 00:17:09,349 Je suis un grand fan. 321 00:17:09,349 --> 00:17:13,900 Mais qu'advient-il si Je viens d'aller à, / bonjour? 322 00:17:13,900 --> 00:17:15,220 Donc, il dit seulement Bonjour tout le monde. 323 00:17:15,220 --> 00:17:17,678 Je ne passais pas un nom, et il remplit automatiquement. 324 00:17:17,678 --> 00:17:22,050 Voyons donc comment il l'a fait, et comment nous pouvons nous débarrasser de ce chapiteau peut-être. 325 00:17:22,050 --> 00:17:26,240 >> Donc, ici, cette est une sorte de un exemple intéressant de, 326 00:17:26,240 --> 00:17:29,101 si vous êtes familier avec la façon interrupteur déclarations travaillent dans une langue. 327 00:17:29,101 --> 00:17:31,350 Dites ceci est un peu comme, ce genre de chute à travers, 328 00:17:31,350 --> 00:17:34,266 où vous réellement attaché à deux différentes voies à la même fonction. 329 00:17:34,266 --> 00:17:41,190 Donc, nous attachons la plus bonjour itinéraire et / le / bonjour / nom route vers Bonjour, 330 00:17:41,190 --> 00:17:45,130 et nous spécifions using-- Python vous permet de préciser la fonction arguments-- par défaut 331 00:17:45,130 --> 00:17:48,300 donc si il ya pas de nom, de sorte si nous allons juste / bonjour, 332 00:17:48,300 --> 00:17:50,680 il va filtrer automatiquement pour le nom est égal à Aucune. 333 00:17:50,680 --> 00:17:55,010 >> Alors, nous rendons la Modèle avec name = nom, 334 00:17:55,010 --> 00:17:59,510 donc il va passer dans le paramètre de nom égal à cette fonction de paramètre de nom, 335 00:17:59,510 --> 00:18:00,730 dans le modèle. 336 00:18:00,730 --> 00:18:04,040 Cela ne explique toujours pas comment est décider d'imprimer Bonjour tout le monde, 337 00:18:04,040 --> 00:18:05,100 ou imprimer mon nom. 338 00:18:05,100 --> 00:18:08,050 Alors regardons effectivement dans le modèle lui-même, 339 00:18:08,050 --> 00:18:11,610 et de voir où cela vient. 340 00:18:11,610 --> 00:18:18,680 >> Ainsi, dans ce modèle, nous avoir fait de la logique conditionnelle, 341 00:18:18,680 --> 00:18:20,580 que certaines personnes seraient argumenter, vous avez réellement 342 00:18:20,580 --> 00:18:23,730 ne devrait pas avoir beaucoup de conditionnel la logique au sein de votre modèle lui-même. 343 00:18:23,730 --> 00:18:26,310 Il devrait être plus au sein de la Contrôleur, mais pour cet exemple 344 00:18:26,310 --> 00:18:27,476 il est quelque chose d'assez petite. 345 00:18:27,476 --> 00:18:31,060 Donc, ici, nous vérifions, si le nom, de sorte Si le nom ne correspond pas à Aucun, 346 00:18:31,060 --> 00:18:33,130 si un nom est en fait passé dans, puis nous 347 00:18:33,130 --> 00:18:36,210 dire Bonjour, nom avec le tête et le chapiteau, 348 00:18:36,210 --> 00:18:41,490 tout cela HTML normale, sinon, nous allons imprimer Bonjour, monde juste normalement. 349 00:18:41,490 --> 00:18:45,820 Alors quelques choses à noter ici sur la façon dont vous formatez le gabarit, 350 00:18:45,820 --> 00:18:49,110 est que, toutes ces instructions conditionnelles, 351 00:18:49,110 --> 00:18:54,475 un peu comme la façon dont nous PHP quand vous voulez insérer un peu de PHP, 352 00:18:54,475 --> 00:18:58,380 vous utilisez le moins-que question marque, il est en quelque sorte analogue ici 353 00:18:58,380 --> 00:19:00,140 avec le {%. 354 00:19:00,140 --> 00:19:02,130 >> Donc, ici, nous avons notre code conditionnel. 355 00:19:02,130 --> 00:19:05,920 Et puis, quand vous voulez réellement évaluer littéralement quelque chose, et imprimer 356 00:19:05,920 --> 00:19:08,710 sortir à l'écran, vous utiliser les doubles accolades. 357 00:19:08,710 --> 00:19:12,310 Voici donc les doubles accolades, puis nous spécifions nom, 358 00:19:12,310 --> 00:19:15,500 donc dans ce cadre, il va évaluer le nom de la variable, qui 359 00:19:15,500 --> 00:19:18,860 a été adoptée depuis l' rendre la fonction de matrice, 360 00:19:18,860 --> 00:19:21,484 plutôt que de simplement l'impression sur, si nous sommes débarrassés de ceux-ci, 361 00:19:21,484 --> 00:19:23,150 il serait tout simplement imprimer le mot «nom». 362 00:19:23,150 --> 00:19:26,340 Donc, voilà quelque chose à surveiller. 363 00:19:26,340 --> 00:19:29,792 >> Donc, une autre chose à avis est que, lorsque nous 364 00:19:29,792 --> 00:19:31,500 vouloir utiliser le fonction render_template, 365 00:19:31,500 --> 00:19:34,490 nous avons fait d'importer explicitement du flacon. 366 00:19:34,490 --> 00:19:36,915 Et ceci est un exemple de la modularité de la Gourde, 367 00:19:36,915 --> 00:19:39,290 que vous ne devez pas importer choses que vous ne avez pas besoin. 368 00:19:39,290 --> 00:19:41,290 Vous pouvez simplement mettre dans le fonctions que vous avez réellement 369 00:19:41,290 --> 00:19:43,450 avez besoin, ce qui est parfois gentil, si vous ne faites pas 370 00:19:43,450 --> 00:19:46,560 avoir toutes ces fonctions assis autour que vous n'êtes pas en utilisant, 371 00:19:46,560 --> 00:19:49,730 mais aussi, si vous oubliez que vous besoin d'importer render_template, 372 00:19:49,730 --> 00:19:52,660 vous aurez probablement un avertissement qui vous permettra de savoir à ce sujet. 373 00:19:52,660 --> 00:19:56,700 Alors, qui est structurant. 374 00:19:56,700 --> 00:20:01,680 >> Donc, nous avons montré comment rendre les pages Web simples, 375 00:20:01,680 --> 00:20:04,947 et d'ajouter un peu plus logique il, en termes de routage variable. 376 00:20:04,947 --> 00:20:08,280 Il vous permet de faire des choses différentes sur la base ce que vous allez à l'URL, et puis aussi, donner 377 00:20:08,280 --> 00:20:11,950 le code HTML d'un peu plus de sens dans termes de la façon dont vous voulez rendre les choses. 378 00:20:11,950 --> 00:20:14,210 Vous ne devez pas mettre tous votre code HTML dans votre Python, 379 00:20:14,210 --> 00:20:16,640 mais pour à peu près chaque application Web, 380 00:20:16,640 --> 00:20:21,480 vous allez vouloir une sorte de modèle de données qui lui est associée. 381 00:20:21,480 --> 00:20:25,560 >> Et traditionnellement, ce serait être quelque chose comme une base de données SQL. 382 00:20:25,560 --> 00:20:30,280 Et vous ne pouvez interagir directement avec SQL. 383 00:20:30,280 --> 00:20:32,190 Python a, je pense qu'il est appelé. 384 00:20:32,190 --> 00:20:33,040 SQLite 3. 385 00:20:33,040 --> 00:20:38,454 Vous pouvez simplement importer SQLite 3 et exécuter directement des requêtes SQL, 386 00:20:38,454 --> 00:20:40,870 mais je ne sais pas pour vous, mais je ne l'aime pas vraiment, juste, 387 00:20:40,870 --> 00:20:42,750 écrire des requêtes SQL. 388 00:20:42,750 --> 00:20:45,350 Elle tend à devenir vraiment long et compliqué. 389 00:20:45,350 --> 00:20:49,180 >> Et donc, quelque chose qui Je tiens à utiliser est ce qui est 390 00:20:49,180 --> 00:20:53,610 connu comme un ORM, qui est un objet-relationnel cartographie. 391 00:20:53,610 --> 00:20:56,890 Et le point d'une mapping objet-relationnel, 392 00:20:56,890 --> 00:21:00,100 est qu'il ya deux différents façons dont vous pouvez penser à des bases de données. 393 00:21:00,100 --> 00:21:03,240 >> Alors que l'exemple Professeur Malan habituellement 394 00:21:03,240 --> 00:21:07,660 utilise en classe, est le tableau Excel, où vous avez ces lignes et ces colonnes, 395 00:21:07,660 --> 00:21:10,210 et ce est vraiment utile pour comment il est représenté dans SQL 396 00:21:10,210 --> 00:21:13,170 et comment vous interagissez avec lui, mais une autre façon qu'il est en fait 397 00:21:13,170 --> 00:21:16,390 utile de penser parfois, est en termes de classes et d'objets. 398 00:21:16,390 --> 00:21:20,420 >> Ainsi, au lieu de penser de chaque tableau comme ayant 399 00:21:20,420 --> 00:21:23,040 cette ligne qui a certaine informations, vous pouvez réellement 400 00:21:23,040 --> 00:21:26,100 penser à elle comme étant chaque tableau est une classe, 401 00:21:26,100 --> 00:21:29,810 puis chaque instance de la classe a certaines propriétés. 402 00:21:29,810 --> 00:21:35,110 Ainsi, dans cet exemple, les instances de la classe sont les lignes de la table, 403 00:21:35,110 --> 00:21:37,490 puis chaque propriété serait une colonne de la table. 404 00:21:37,490 --> 00:21:40,840 >> Donc, l'ORM que je l'aime à utiliser est appelé peewee. 405 00:21:40,840 --> 00:21:43,520 Il est vraiment petit, un peu comme Flask. 406 00:21:43,520 --> 00:21:46,760 Je pense qu'ils vont bien ensemble, mais il ya beaucoup d'autres ORM 407 00:21:46,760 --> 00:21:47,730 que vous pouvez utiliser. 408 00:21:47,730 --> 00:21:52,180 A l'un est plus populaire connu sous le nom SQLAlchemy, 409 00:21:52,180 --> 00:21:56,050 et je ne me souviens pas pourquoi je l'origine choisir peewee sur SQLAlchemy, 410 00:21:56,050 --> 00:21:58,311 ou je vous dire pourquoi je pense qu'il est le meilleur, 411 00:21:58,311 --> 00:22:01,060 mais nous allons simplement utiliser ce l'un parce que je sais comment l'utiliser. 412 00:22:01,060 --> 00:22:04,760 >> Donc, on question est, pourquoi devriez vous déranger l'aide d'un ORM, 413 00:22:04,760 --> 00:22:07,552 au lieu de simplement directement écriture de requêtes SQL? 414 00:22:07,552 --> 00:22:09,760 Et je pense que le meilleur des cas, est que vous ne pas réellement 415 00:22:09,760 --> 00:22:11,356 avoir à écrire des requêtes SQL. 416 00:22:11,356 --> 00:22:14,480 Il est beaucoup plus facile, comme je vais vous montrer, à faire des choses comme la sélection, insertion, 417 00:22:14,480 --> 00:22:16,157 suppression, en particulier la création de tables. 418 00:22:16,157 --> 00:22:17,990 Il est beaucoup plus facile de écrire une structure de classe, 419 00:22:17,990 --> 00:22:22,250 que de structurer une Créez Déclaration de la table, mais une chose 420 00:22:22,250 --> 00:22:25,710 à être au courant, est-ce l'ORM va essayer de son mieux 421 00:22:25,710 --> 00:22:28,640 de comprendre ce que le plus efficace requête SQL serait, 422 00:22:28,640 --> 00:22:30,110 mais parfois, il se trompe. 423 00:22:30,110 --> 00:22:32,660 >> Et surtout si vous êtes travailler avec une grande base de données, 424 00:22:32,660 --> 00:22:35,557 vous pouvez remarquer que une requête qui devrait être opérationnel rapidement, 425 00:22:35,557 --> 00:22:36,640 est réellement prendre plus de temps. 426 00:22:36,640 --> 00:22:40,164 Et si vous regardez sous le capot comment l'ORM interprète que dans SQL, 427 00:22:40,164 --> 00:22:42,080 il pourrait faire quelque chose vraiment ridicule, 428 00:22:42,080 --> 00:22:44,371 juste parce que ce genre de un geste vos intentions mal. 429 00:22:44,371 --> 00:22:48,080 Et, il ya eu des moments où Je ai eu l'écraser, et juste 430 00:22:48,080 --> 00:22:52,429 exécuter mes propres requêtes SQL, juste parce qu'il a été l'analyse d'une manière étrange. 431 00:22:52,429 --> 00:22:54,220 Donc, il ya une certaine tête, juste dans la manière 432 00:22:54,220 --> 00:22:58,680 qu'il compile votre déclarations bas dans SQL. 433 00:22:58,680 --> 00:23:06,200 >> Alors, regardons rapidement au super- un exemple simple d'un modèle de données 434 00:23:06,200 --> 00:23:07,350 que vous pourriez utiliser. 435 00:23:07,350 --> 00:23:11,880 Donc, cela est du code Python, et donc le première chose que vous voulez faire est de partir 436 00:23:11,880 --> 00:23:12,950 peewee import *. 437 00:23:12,950 --> 00:23:15,850 Ainsi, contrairement à Flask, où vous avez l'ensemble de ces modules individuels, 438 00:23:15,850 --> 00:23:18,125 et que vous voulez importer Flask, et écrire un modèle, et quelques autres 439 00:23:18,125 --> 00:23:20,690 que nous le verrons plus tard, de peewee, il vous suffit de tout importer, 440 00:23:20,690 --> 00:23:22,290 parce qu'il est une jolie petite bibliothèque. 441 00:23:22,290 --> 00:23:26,490 >> Donc, la première chose que vous voulez faire, est effectivement créer cet objet de base de données. 442 00:23:26,490 --> 00:23:31,212 Donc, vous avez db = SQLiteDatabase, puis le nom de votre base de données. 443 00:23:31,212 --> 00:23:33,170 Et ce sera effectivement créer un objet de base de données 444 00:23:33,170 --> 00:23:36,230 que vous pouvez interagir avec, avec peewee. 445 00:23:36,230 --> 00:23:40,570 >> Et puis, nous avons la réelle modèle que nous voulons créer. 446 00:23:40,570 --> 00:23:42,470 Donc la table nous voulons créer. 447 00:23:42,470 --> 00:23:47,270 Ainsi, au sein de peewee, chaque classe a sa propre table au sein de votre base de données. 448 00:23:47,270 --> 00:23:52,800 Ainsi, toutes les classes hériter du modèle de base, 449 00:23:52,800 --> 00:23:55,960 et le modèle M est capital quelque chose qui est défini dans peewee. 450 00:23:55,960 --> 00:24:02,162 >> Ainsi, l'ensemble de vos modèles devraient héritent comme leur plus haut superclasse, 451 00:24:02,162 --> 00:24:04,620 ils devraient hériter de la modèle, mais ce qui est vraiment cool, 452 00:24:04,620 --> 00:24:07,610 est que vous pouvez réellement avoir votre modèles héritent de l'autre. 453 00:24:07,610 --> 00:24:10,530 Et beaucoup de temps, votre les modèles de données ne sont pas nécessairement 454 00:24:10,530 --> 00:24:13,754 faire une hiérarchie d'héritage agréable, mais fois où ils le font, il est vraiment agréable, 455 00:24:13,754 --> 00:24:15,920 parce que vous avez le modèle inhérente de l'autre. 456 00:24:15,920 --> 00:24:19,710 >> Donc, nous avons défini cette classe «étudiant», qui hérite d'un modèle, 457 00:24:19,710 --> 00:24:21,170 et il a trois propriétés. 458 00:24:21,170 --> 00:24:24,080 Il dispose d'un ID, qui est un PrimaryKeyField, qui 459 00:24:24,080 --> 00:24:26,920 est quelque chose qui est prévu par peewee, le nom est un CharField, 460 00:24:26,920 --> 00:24:28,490 et une note est un IntegerField. 461 00:24:28,490 --> 00:24:32,260 Donc, il peut ou ne peut pas être comment CS50 stocke en fait tout 462 00:24:32,260 --> 00:24:33,650 les notes des élèves. 463 00:24:33,650 --> 00:24:36,060 Il est pas, mais voilà comment je le ferais. 464 00:24:36,060 --> 00:24:37,920 >> Et puis, il a, dans les cette classe, et cela 465 00:24:37,920 --> 00:24:41,620 est quelque chose que vous pouvez faire avec Python, vous pouvez avoir des classes imbriquées. 466 00:24:41,620 --> 00:24:43,920 Et ceci est quelque chose ce qui est exigé par peewee. 467 00:24:43,920 --> 00:24:47,250 Donc, ce Meta de classe, vous avez pour indiquer que la base de données est 468 00:24:47,250 --> 00:24:49,830 égal à l'objet que nous avons créé ci-dessus. 469 00:24:49,830 --> 00:24:54,339 Et cela dit ce fichier est ce tableau passe réellement à être contenue dans. 470 00:24:54,339 --> 00:24:57,130 Donc ceci est quelque chose que vous avez à faire au sein de l'ensemble de vos modèles. 471 00:24:57,130 --> 00:24:59,380 Vous avez juste à préciser au sein de cette classe Meta 472 00:24:59,380 --> 00:25:01,400 cette base de données est égal à db. 473 00:25:01,400 --> 00:25:03,940 Donc, ce que je fais d'habitude, si je dois un tas de différents modèles, 474 00:25:03,940 --> 00:25:05,910 est que je dois une base modèle, que je généralement 475 00:25:05,910 --> 00:25:08,839 il suffit d'appeler "modèle de base" qui a la classe Meta, 476 00:25:08,839 --> 00:25:10,380 et il définit la base de données égale à db. 477 00:25:10,380 --> 00:25:13,710 Et puis tous mes modèles ultérieurs va hériter de cette classe de base. 478 00:25:13,710 --> 00:25:16,760 Et puis, je ne dois pas vous inquiéter sur la définition du Meta classe. 479 00:25:16,760 --> 00:25:21,490 >> Donc, quand cela devient réalité compilé vers le bas dans une instruction SQL, 480 00:25:21,490 --> 00:25:24,875 il ressemble à cette chose méchante bas ici, "Créer la table d'étudiant entier, 481 00:25:24,875 --> 00:25:26,020 " peu importe. 482 00:25:26,020 --> 00:25:30,002 >> Et, je pense qu'il est plus courte, cette requête SQL ici, 483 00:25:30,002 --> 00:25:32,960 mais si vous regardez cette classe ici vous pouvez voir exactement ce qui se passe. 484 00:25:32,960 --> 00:25:36,116 Vous pouvez voir quelles sortes de domaines il ya, ce qu'ils sont appelés, 485 00:25:36,116 --> 00:25:38,115 et ainsi, je pense que en regardant ce code Python 486 00:25:38,115 --> 00:25:43,340 est beaucoup plus lisible que en essayant d'écrire cette requête SQL. 487 00:25:43,340 --> 00:25:45,990 >> Donc, afin de réellement utiliser la base de données, 488 00:25:45,990 --> 00:25:48,470 nous avons pour vous connecter à un délai Python. 489 00:25:48,470 --> 00:25:52,770 Donc, je l'habitude d'écrire une fonction appelée initialize_db qui fait deux choses. 490 00:25:52,770 --> 00:25:54,880 Il faut dans la base de données objet DB et il 491 00:25:54,880 --> 00:25:58,360 en communication avec elle, qui débouche juste jusqu'à la section de la base de données. 492 00:25:58,360 --> 00:26:00,860 Si vous êtes juste courir si site Web sur votre machine locale, 493 00:26:00,860 --> 00:26:04,320 il est pas un super grand-chose à craindre sur la connexion et la déconnexion, 494 00:26:04,320 --> 00:26:06,885 mais si vous utilisez sur un site Web, vous 495 00:26:06,885 --> 00:26:10,010 vouloir faire en sorte que, chaque fois qu'un utilisateur relie à elle, quand ils ferment sur 496 00:26:10,010 --> 00:26:12,270 le site, ils se déconnectent de sorte que vous ne pas avoir un tas de personnes connectées 497 00:26:12,270 --> 00:26:14,480 à votre base de données à la fois. 498 00:26:14,480 --> 00:26:16,370 >> Et puis, quand vous connecter à la base, 499 00:26:16,370 --> 00:26:20,832 vous voulez appeler db.create_tables, et la liste des modèles pour ce que vous voulez 500 00:26:20,832 --> 00:26:21,540 pour créer des tableaux. 501 00:26:21,540 --> 00:26:23,950 Donc ici, je veux juste créer pour cet étudiant. 502 00:26:23,950 --> 00:26:28,070 Et puis, ce qui est important, est de préciser sécurité = True la plupart du temps. 503 00:26:28,070 --> 00:26:30,380 Alors, que cette déclaration va faire, est qu'il 504 00:26:30,380 --> 00:26:33,580 crée des tables pour le modèle de l'élève, mais seulement 505 00:26:33,580 --> 00:26:36,109 si cette table n'a pas déjà été créé. 506 00:26:36,109 --> 00:26:37,400 Voilà ce que spécifie sûres. 507 00:26:37,400 --> 00:26:39,150 Donc, il ne va pas écraser votre table existante, 508 00:26:39,150 --> 00:26:41,525 il ne fera que créer un nouveau table si il n'y a pas un là. 509 00:26:41,525 --> 00:26:45,090 Donc, vous pourriez créer les tables une fois en utilisant SQL. 510 00:26:45,090 --> 00:26:49,410 Et alors que la base de données séance là, et puis se connecter à chaque fois, 511 00:26:49,410 --> 00:26:52,450 mais il est généralement agréable juste à mettre dans cette create_tables appel, 512 00:26:52,450 --> 00:26:55,550 de sorte que, si jamais vous supprimez votre base de données lorsque vous exécutez votre site Web 513 00:26:55,550 --> 00:26:57,960 application à nouveau, il va recréer. 514 00:26:57,960 --> 00:27:00,730 >> Donc, assurez-vous que sécuritaire est spécifié pour être vrai, 515 00:27:00,730 --> 00:27:03,580 ou vous trouverez vos données simplement se clobbered chaque fois. 516 00:27:03,580 --> 00:27:06,380 Et puis, vous pouvez simplement appeler initialize_db à établir 517 00:27:06,380 --> 00:27:09,820 une connexion, et de créer tableaux si nécessaire. 518 00:27:09,820 --> 00:27:13,150 >> Donc, la chose la plus commune que vous aurez envie de faire, 519 00:27:13,150 --> 00:27:15,920 ou l'une des choses les plus communes, est réellement insérer des choses 520 00:27:15,920 --> 00:27:17,170 dans votre base de données. 521 00:27:17,170 --> 00:27:19,430 Et si, plutôt que d'avoir pour écrire un insert dans 522 00:27:19,430 --> 00:27:21,990 déclaration avec tous Les valeurs spécifiées, 523 00:27:21,990 --> 00:27:24,650 vous pouvez réellement appeler fonction de la classe de l'élève. 524 00:27:24,650 --> 00:27:28,200 Donc, lorsque vous créez une classe qui hérite de modèle, 525 00:27:28,200 --> 00:27:30,200 il a cette méthode create. 526 00:27:30,200 --> 00:27:33,870 >> Donc, vous faites name.create de classe, et que vous spécifiez les paramètres 527 00:27:33,870 --> 00:27:35,260 que vous voulez passer. 528 00:27:35,260 --> 00:27:39,200 Donc, si je veux ajouter quelques étudiants à notre exemple CS50 de carnet de notes, 529 00:27:39,200 --> 00:27:41,820 Je vais mettre en David, qui a un très bonne qualité, il a un 95. 530 00:27:41,820 --> 00:27:45,100 Et moi-même, qui est de ne pas faire si bien dans CS50, je dois 50. 531 00:27:45,100 --> 00:27:47,600 Et donc, la bonne chose à propos ce que cette fonction fait de créer, 532 00:27:47,600 --> 00:27:53,040 est qu'il renvoie l'instance, ou le rangée, qu'il a créé au sein de la table, 533 00:27:53,040 --> 00:27:55,750 et alors vous stockez que dans un variable et travailler avec elle plus tard. 534 00:27:55,750 --> 00:27:58,830 Vous pouvez changer autour, qui Je vais vous montrer un exemple de. 535 00:27:58,830 --> 00:28:03,050 >> Remarquez que je ne l'ai pas avoir pour spécifier l'ID, 536 00:28:03,050 --> 00:28:09,340 car puisqu'il est le PrimaryKeyField, il sera automatiquement 537 00:28:09,340 --> 00:28:10,930 incrémenter si vous ne le spécifiez pas. 538 00:28:10,930 --> 00:28:12,250 Et, en fait, vous avez probablement ne devrait pas spécifier, 539 00:28:12,250 --> 00:28:14,810 parce que vous pourriez accidentellement tabasser ID de quelqu'un d'autre. 540 00:28:14,810 --> 00:28:16,830 Et vous voulez faire vous qu'il est unique. 541 00:28:16,830 --> 00:28:20,662 >> Donc, en fait, le plus chose commune que vous voulez faire, 542 00:28:20,662 --> 00:28:22,620 est probablement sélectionner sur de la base de données une fois que vous 543 00:28:22,620 --> 00:28:24,078 avoir beaucoup d'informations là-bas. 544 00:28:24,078 --> 00:28:27,360 Et donc, si vous voulez obtenir tout, donc l'équivalent de l'étoile sélectionnez 545 00:28:27,360 --> 00:28:30,940 à partir de la déclaration des étudiants, il serait juste student.select. 546 00:28:30,940 --> 00:28:34,380 Et qui va vous redonner un tableau avec l'ensemble de l'étudiant objets qu'il 547 00:28:34,380 --> 00:28:35,770 que vous itérer à travers vous voulez. 548 00:28:35,770 --> 00:28:37,019 Vous pouvez obtenir des choses hors de lui. 549 00:28:37,019 --> 00:28:39,310 Et la plupart du temps, vous ne veulent pas seulement faire de sélection, 550 00:28:39,310 --> 00:28:40,935 vous voulez réellement de préciser quelque chose. 551 00:28:40,935 --> 00:28:44,580 Et oui, vous pouvez enchaîner L'ensemble de ces appels de fonction, 552 00:28:44,580 --> 00:28:48,830 comme la façon dont vous le feriez chaîne ainsi que les déclarations en SQL. 553 00:28:48,830 --> 00:28:53,002 Donc vous pouvez faire student.select (). Où dans cet exemple. 554 00:28:53,002 --> 00:28:54,710 Et puis, vous pouvez préciser les conditions, 555 00:28:54,710 --> 00:28:57,880 simplement en utilisant Python normale Booléens pour vérifier les choses. 556 00:28:57,880 --> 00:29:02,110 >> Donc, dans ce cas, vous voulez limiter ce que vous choisissez à, 557 00:29:02,110 --> 00:29:06,790 où student.grade est égal à 50, et student.name est égal à Esdras, 558 00:29:06,790 --> 00:29:09,130 ce qui va juste me sortir de celui-ci. 559 00:29:09,130 --> 00:29:11,340 Et remarquez, on vraiment chose subtile ici 560 00:29:11,340 --> 00:29:15,570 que, si vous souhaitez spécifier une et / ou un ou et / ou, 561 00:29:15,570 --> 00:29:19,840 en Python, vous utiliseriez normalement, Je pense que le mot "et" effectivement, 562 00:29:19,840 --> 00:29:23,351 mais ici, vous utilisez le seul esperluette, qui est normalement un opérateur au niveau du bit, 563 00:29:23,351 --> 00:29:25,600 mais dans ce cas particulier, juste la façon dont peewee fait, 564 00:29:25,600 --> 00:29:27,660 vous utilisez la seule esperluette de préciser «et». 565 00:29:27,660 --> 00:29:29,451 Voilà quelque chose qui Je me mêle beaucoup, 566 00:29:29,451 --> 00:29:32,530 mais il ne vient pas beaucoup plus que dans la pratique. 567 00:29:32,530 --> 00:29:36,350 >> Et puis, une fois que vous avez tous les étudiants sur la base de données, 568 00:29:36,350 --> 00:29:39,420 une fois que vous avez fait vous êtes sélectionnez et votre usure ou autre, 569 00:29:39,420 --> 00:29:42,334 vous pouvez utiliser une boucle foreach, tout comme normale en Python, 570 00:29:42,334 --> 00:29:44,500 avec toute sorte de iterator ou avec toute sorte de tableau. 571 00:29:44,500 --> 00:29:46,333 Ainsi, vous pouvez le faire, pour s dans student.select (). whe 572 00:29:46,333 --> 00:29:52,930 re (Student.grade <75), et ainsi de cette volonté itérer sur chaque élève dans le tableau 573 00:29:52,930 --> 00:29:56,260 dont le grade est inférieur à 75, ce qui dans ce cas, est toujours juste moi. 574 00:29:56,260 --> 00:29:59,218 Et puis, vous pourriez faire quelque chose au sein de cette boucle, comme envoyer moi un email 575 00:29:59,218 --> 00:30:01,680 et me fait dire tourner dans mes séries de problèmes. 576 00:30:01,680 --> 00:30:04,550 >> Donc, une autre chose que vous pouvez faire, est-il est vraiment facile 577 00:30:04,550 --> 00:30:06,460 de mettre à jour les lignes dans la table. 578 00:30:06,460 --> 00:30:08,720 Alors, rappelez-vous de retour ici, votre quand je inséré, 579 00:30:08,720 --> 00:30:11,440 Je pris la valeur qui était retourné par student.create, 580 00:30:11,440 --> 00:30:14,920 et je affecté à nom appelé Ezra. 581 00:30:14,920 --> 00:30:18,995 Et maintenant, vous pouvez changer la les valeurs au sein de cette instance, 582 00:30:18,995 --> 00:30:20,870 tout comme vous le feriez un classe normale en Python. 583 00:30:20,870 --> 00:30:25,060 >> Donc, vous pouvez définir ezra.grade = 95 et qui mettra à jour la copie locale, 584 00:30:25,060 --> 00:30:28,380 mais si vous voulez vraiment engager ce changement de base de données, 585 00:30:28,380 --> 00:30:31,410 vous devez appeler ezra.save, de sorte que vous appeliez la méthode .save 586 00:30:31,410 --> 00:30:32,650 sur l'instance. 587 00:30:32,650 --> 00:30:38,085 >> Et maintenant, je l'ai changé avec succès ma propre qualité au sein de la base de données. 588 00:30:38,085 --> 00:30:41,210 Ainsi, alors disons que je me fais prendre changer ma note au sein de la base de données. 589 00:30:41,210 --> 00:30:44,126 Professeur Malan va probablement vouloir me supprimer de la classe, 590 00:30:44,126 --> 00:30:48,630 et ainsi vous pouvez appeler le .delete méthode d'instance simplement sur cette chose. 591 00:30:48,630 --> 00:30:51,674 >> Donc, si vous vouliez aller nouveau dans cette boucle ici, 592 00:30:51,674 --> 00:30:53,465 et en fait, au lieu l'envoi de courriels tous les 593 00:30:53,465 --> 00:30:56,577 des étudiants dont le grade est moins de 75, vous avez voulu les supprimer, 594 00:30:56,577 --> 00:30:58,660 au sein de cette boucle vous pouviez appeler exemple s.delete. 595 00:30:58,660 --> 00:31:04,180 596 00:31:04,180 --> 00:31:07,780 Et la dernière chose que vous voulez faire, est à chaque fois que vous établissez une connexion, 597 00:31:07,780 --> 00:31:10,350 et vous avez terminé votre travail, vous voulez appeler db.close, 598 00:31:10,350 --> 00:31:13,190 où cette base de données est db objecter que nous avions avant. 599 00:31:13,190 --> 00:31:18,290 Et vous voulez vous assurer que tout est fermé sur. 600 00:31:18,290 --> 00:31:18,790 >> Cool. 601 00:31:18,790 --> 00:31:22,410 Alors maintenant, je dois un exemple d'application. 602 00:31:22,410 --> 00:31:26,880 Je l'ai sorte de pré-faites tout simplement de sorte qu'il n'y aura pas de codage en direct 603 00:31:26,880 --> 00:31:30,220 des erreurs, mais nous pouvons marcher à travers et voyez comment vous mettriez Flask 604 00:31:30,220 --> 00:31:33,685 et peewee ensemble, et de faire une application simple. 605 00:31:33,685 --> 00:31:38,680 Je l'appelle CS50 diatribe, et il est une sorte de plate-forme de blog simple. 606 00:31:38,680 --> 00:31:41,150 >> Donc, premièrement, je vais courir et montrer à quoi il ressemble, 607 00:31:41,150 --> 00:31:42,890 et alors nous pouvons regarder de plus dans le code. 608 00:31:42,890 --> 00:32:00,470 609 00:32:00,470 --> 00:32:02,830 Bon, alors disons simplement exploités cela. 610 00:32:02,830 --> 00:32:14,040 611 00:32:14,040 --> 00:32:17,250 Cool, je vais faire ce un peu plus petit. 612 00:32:17,250 --> 00:32:20,000 Il est pas très jolie, juste parce que Je ne fais beaucoup de CSS, 613 00:32:20,000 --> 00:32:23,255 mais ce qu'il fait est, il a Cette base de données de messages de blog, 614 00:32:23,255 --> 00:32:25,630 et il passe par toutes eux, et il les affichera 615 00:32:25,630 --> 00:32:28,170 sur la page dans l'ordre du plus récent. 616 00:32:28,170 --> 00:32:30,920 Et si ceux-ci ne sont que quelques postes que je l'avais enregistré dans la base de données. 617 00:32:30,920 --> 00:32:35,680 >> Donc, si nous voulons créer une nouvelle après, nous pouvons aller à ajouter un nouveau message, 618 00:32:35,680 --> 00:32:42,720 et nous pouvons entrer dans le titre de la poste, donc quelque chose comme, séminaire CS50. 619 00:32:42,720 --> 00:32:45,360 620 00:32:45,360 --> 00:32:46,735 Wow, vraiment profiter de ce séminaire. 621 00:32:46,735 --> 00:32:51,070 622 00:32:51,070 --> 00:32:52,270 >> Cool. 623 00:32:52,270 --> 00:32:56,060 Ensuite, vous presse d'après, et il sera vous rediriger vers la page d'accueil, 624 00:32:56,060 --> 00:33:00,039 et puis vous verrez que le dernier message a été ajouté. 625 00:33:00,039 --> 00:33:01,580 Et nous avons encore tous ceux là. 626 00:33:01,580 --> 00:33:08,080 Alors maintenant, nous allons étape à travers l'ensemble de la code et voir comment cela est mis en œuvre. 627 00:33:08,080 --> 00:33:11,995 >> Donc, je pense que la première chose que nous allons jetez un oeil à, est en fait les modèles. 628 00:33:11,995 --> 00:33:14,120 Une grande partie du temps, quand vous concevez quelque chose, 629 00:33:14,120 --> 00:33:17,036 vous voulez d'abord penser à la façon dont vous allez représenter vos données, 630 00:33:17,036 --> 00:33:22,915 puis de concevoir les choses autour de ce que, de telle sorte que tout a un sens. 631 00:33:22,915 --> 00:33:25,290 Et qui est en fait la façon dont je l'a fait quand je faisais cela, 632 00:33:25,290 --> 00:33:28,030 Je me suis assis et je pensais, ce que je veux dans un post. 633 00:33:28,030 --> 00:33:32,130 >> Donc, ici, nous avons la même structure que je disais plus tôt, 634 00:33:32,130 --> 00:33:33,755 où nous faisons db = SqlDatabase ('posts.db'). 635 00:33:33,755 --> 00:33:37,840 636 00:33:37,840 --> 00:33:40,980 En réalité, vous ne voulez probablement pas coder en dur dans les bases de données de votre nom. 637 00:33:40,980 --> 00:33:43,730 Cela devrait probablement être un paramètre qui est stocké quelque part, peut-être 638 00:33:43,730 --> 00:33:45,940 dans un fichier de configuration, mais dans un petit exemple de ce genre, 639 00:33:45,940 --> 00:33:48,310 il est correct de coder en dur que. 640 00:33:48,310 --> 00:33:53,510 >> Alors maintenant, nous avons cette classe Post, qui hérite à partir du modèle de base. 641 00:33:53,510 --> 00:33:56,930 Et il a, à nouveau, la ID = PrimaryKeyField. 642 00:33:56,930 --> 00:34:02,250 En fait, si vous ne spécifiez pas, si je réellement me suis débarrassé de cette, 643 00:34:02,250 --> 00:34:07,152 Peewee puis nous allons prendre soin de créer automatiquement que champ ID, 644 00:34:07,152 --> 00:34:09,360 et il sera automatiquement faire un PrimaryKey, qui 645 00:34:09,360 --> 00:34:12,485 Je pense est vraiment très agréable, parce que d'habitude, qui est quelque chose que vous voulez avoir, 646 00:34:12,485 --> 00:34:16,239 mais je tiens à le mettre dans spécifiquement, juste pour que je me souviens qu'il est là. 647 00:34:16,239 --> 00:34:19,480 Mais si vous ne spécifiez pas que, que ce qu'il y aura automatiquement. 648 00:34:19,480 --> 00:34:22,198 >> Alors, je dois une date est un DateTimeField, et tout 649 00:34:22,198 --> 00:34:24,864 ces différents domaines, si vous regarder la documentation peewee, 650 00:34:24,864 --> 00:34:28,920 il vous donnera une liste des différents types de champs que vous pouvez utiliser. 651 00:34:28,920 --> 00:34:34,440 Pour la plupart, il est analogue à ce que vous verriez dans SQL. 652 00:34:34,440 --> 00:34:37,699 Donc, il ya un CharField, un VarCharFields, TextField, 653 00:34:37,699 --> 00:34:40,550 qui sont très longtemps textes, comme un article de blog 654 00:34:40,550 --> 00:34:44,460 potentiellement, DateTimeFields, DoubleFields, FloatFields, 655 00:34:44,460 --> 00:34:46,100 toutes choses comme ça. 656 00:34:46,100 --> 00:34:51,570 >> Et vous pouvez passer dans d'autres arguments à elle, que je ne précise ici. 657 00:34:51,570 --> 00:34:55,719 Disons, par exemple, vous ne voulez pas permettre à deux postes d'avoir le même titre, 658 00:34:55,719 --> 00:34:59,672 vous pouvez spécifier quelque chose comme uniques = True, 659 00:34:59,672 --> 00:35:02,880 et que est juste un paramètre supplémentaire à le domaine que quand il compile vers le bas 660 00:35:02,880 --> 00:35:06,865 dans le SQL, il précisera qu'il doit être unique. 661 00:35:06,865 --> 00:35:09,740 Vous pouvez également spécifier quelque chose comme pas nulle et toutes les autres choses 662 00:35:09,740 --> 00:35:11,750 vous le faites normalement dans SQL. 663 00:35:11,750 --> 00:35:16,020 Donc, ceci est un assez simple modèle qui a la date. 664 00:35:16,020 --> 00:35:19,460 Remarquez ici, au sein de la DateTimeField, Je spécifie ce que le défaut est. 665 00:35:19,460 --> 00:35:22,560 Je ai précisé qu'il soit datetime.datetime.now, 666 00:35:22,560 --> 00:35:24,920 en raison de la façon dont cela devient évaluée, 667 00:35:24,920 --> 00:35:28,750 il évalue réellement l'DateTime.Now quand 668 00:35:28,750 --> 00:35:32,110 il est inséré dans la base de données. 669 00:35:32,110 --> 00:35:34,760 >> Je pense que, je dois de doubler le vérifier, 670 00:35:34,760 --> 00:35:38,222 mais si vous avez fait quelque chose comme cela, alors il serait effectivement évaluer qu'une fois, 671 00:35:38,222 --> 00:35:40,180 puis l'DateTime serait toujours le même. 672 00:35:40,180 --> 00:35:44,240 Donc, juste si vous faites quelque chose avec datetimes, double vérification 673 00:35:44,240 --> 00:35:47,080 qu'il est quand évaluer obtient réellement insérée, ou bien 674 00:35:47,080 --> 00:35:48,780 vous pourriez être confondu. 675 00:35:48,780 --> 00:35:51,221 >> Le titre est juste un CharField, qui y 676 00:35:51,221 --> 00:35:53,970 sont d'autres arguments, vous pouvez passer en précisant exactement combien de temps vous 677 00:35:53,970 --> 00:35:56,170 veux que ce soit, mais ici, il n'a pas vraiment d'importance. 678 00:35:56,170 --> 00:35:58,687 Et le texte va être le texte de l'ensemble du poste, 679 00:35:58,687 --> 00:36:01,020 et que ça va être un TextField juste parce que vous voulez 680 00:36:01,020 --> 00:36:03,370 pour lui permettre d'être un peu longue chaîne. 681 00:36:03,370 --> 00:36:05,970 >> Ensuite, nous avons cette Meta la sous-classe qui vient 682 00:36:05,970 --> 00:36:11,250 spécifie que nous voulons que la base de données lorsque cela est effectivement ouvert en 683 00:36:11,250 --> 00:36:14,267 d'être l'objet de db que nous avons ici. 684 00:36:14,267 --> 00:36:16,350 Et dernière chose que nous avons ici, est simplement cette fonction 685 00:36:16,350 --> 00:36:18,120 que nous allons utiliser à partir de notre application principale 686 00:36:18,120 --> 00:36:23,970 pour initialiser la base pour se connecter à , puis pour créer la table Post. 687 00:36:23,970 --> 00:36:26,880 >> Maintenant, regardons l'application principale elle-même. 688 00:36:26,880 --> 00:36:30,800 Alors celui-ci est tout à fait une peu plus longtemps que ceux 689 00:36:30,800 --> 00:36:34,840 que nous avons vu auparavant, mais heureusement pas trop mal. 690 00:36:34,840 --> 00:36:37,140 Alors, permettez-moi d'exprimer cela. 691 00:36:37,140 --> 00:36:38,370 Bien. 692 00:36:38,370 --> 00:36:42,070 >> Donc, avis et le top Je importé tout un tas d'autres choses 693 00:36:42,070 --> 00:36:44,129 Flacon de que nous avons pas vraiment vu avant. 694 00:36:44,129 --> 00:36:46,670 Et nous espérons, nous pouvons passer par chacun de ceux-ci un par un 695 00:36:46,670 --> 00:36:49,420 et de parler un peu plus sur eux, triées par exemple. 696 00:36:49,420 --> 00:36:51,380 Donc, nous avons le flacon, et la render_template, 697 00:36:51,380 --> 00:36:54,370 que nous avons vu auparavant, cet objet de la demande, 698 00:36:54,370 --> 00:37:00,400 qui viendra lorsque nous regardons comment la forme que je montrais effectivement 699 00:37:00,400 --> 00:37:01,170 travaux. 700 00:37:01,170 --> 00:37:04,850 Redirection, ce qui vous permet de réacheminer Retour de la Créer un nouveau message 701 00:37:04,850 --> 00:37:11,710 retour à l'accueil d'origine, puis URL, ce qui est quelque chose qui vous permet de 702 00:37:11,710 --> 00:37:15,550 comprendre où sur le site web une page particulière est. 703 00:37:15,550 --> 00:37:17,810 >> Alors, la prochaine chose que je fais, je l'importation est 704 00:37:17,810 --> 00:37:21,550 toutes les informations à partir des modèles les fichiers que nous étions juste de regarder. 705 00:37:21,550 --> 00:37:23,140 Et, oui. 706 00:37:23,140 --> 00:37:28,720 >> Donc, autre nouveau quelque chose qui vient lorsque vous avez affaire, 707 00:37:28,720 --> 00:37:31,850 en particulier les bases de données, est que vous pouvez spécifier 708 00:37:31,850 --> 00:37:35,110 une fonction qui est appelée avant chaque demande, et la fonction qui obtient 709 00:37:35,110 --> 00:37:39,690 appelée après chaque requête, en utilisant cette la demande de la fonction décorateur. 710 00:37:39,690 --> 00:37:42,324 >> Et donc cela va se exécuté où cette fonction est. 711 00:37:42,324 --> 00:37:44,240 Cela ne doit pas être appelé avant que la demande, 712 00:37:44,240 --> 00:37:46,281 mais habituellement que quelque chose judicieux d'appeler. 713 00:37:46,281 --> 00:37:48,580 714 00:37:48,580 --> 00:37:51,650 Vous pouvez spécifier quelle que soit la fonction vous voulez vous appelle là-bas, 715 00:37:51,650 --> 00:37:56,330 donc je précisé cette initialize_db fonction que nous avions en arrière dans les modèles 716 00:37:56,330 --> 00:38:02,390 fichier, donc avant chaque demande, vous souhaitez vous connecter à la base de données. 717 00:38:02,390 --> 00:38:04,560 >> Il existe deux différentes façons dont vous pouvez faire cela. 718 00:38:04,560 --> 00:38:10,830 Vous pouvez le faireapp., I crois qu'il est after_request. 719 00:38:10,830 --> 00:38:13,800 Et la différence entre after_request et teardown_request, 720 00:38:13,800 --> 00:38:17,590 est que after_request ne se produira si la demande était en fait valide. 721 00:38:17,590 --> 00:38:20,440 Et donc, que si le requête est réussie, 722 00:38:20,440 --> 00:38:22,490 Si tout va bien, mais teardown_request 723 00:38:22,490 --> 00:38:26,300 qui se passe dans le cas d'un succès demande, ou dans le cas d'une erreur. 724 00:38:26,300 --> 00:38:28,252 >> Donc, en général, vous voulez à utiliser teardown_request, 725 00:38:28,252 --> 00:38:30,460 sauf si vous voulez faire quelque chose, en particulier différent 726 00:38:30,460 --> 00:38:31,470 dans le cas d'une erreur. 727 00:38:31,470 --> 00:38:35,122 Mais juste pour la fermeture de la base de données, si elle réussit ou si elle échoue, 728 00:38:35,122 --> 00:38:37,080 Nous ne vous voulez déconnecter de la base de données. 729 00:38:37,080 --> 00:38:41,240 Donc, il est appelé, db.close sur l'objet de db. 730 00:38:41,240 --> 00:38:43,740 >> Notez que le teardown_request prend une exception. 731 00:38:43,740 --> 00:38:46,781 Ainsi, vous pouvez vérifier si il y avait effectivement une erreur quand il fermait, 732 00:38:46,781 --> 00:38:49,390 mais ici, nous l'espérons, il ne sont pas beaucoup d'erreurs, 733 00:38:49,390 --> 00:38:52,720 donc nous sommes juste une sorte d'ignorer cela. 734 00:38:52,720 --> 00:38:55,990 >> D'accord, et le reste est pas trop mal. 735 00:38:55,990 --> 00:39:02,240 Donc, quand nous allons à la page d'accueil, nous avons rendu ce modèle home.html 736 00:39:02,240 --> 00:39:03,490 qui va ouvrir. 737 00:39:03,490 --> 00:39:06,240 Le laissez-passer est en poste égal à, et ce que cela 738 00:39:06,240 --> 00:39:10,260 fait est, rappelez-vous que nous avons ce poste modèle, nous sélectionnons donc tous les postes, 739 00:39:10,260 --> 00:39:13,890 puis une autre chose que vous pouvez faire, vous pouvez spécifier la clause WHERE, 740 00:39:13,890 --> 00:39:16,910 vous pouvez spécifier une ORDER BY, et nous prenons donc 741 00:39:16,910 --> 00:39:18,820 tous les postes qui obtenir sélectionné, puis 742 00:39:18,820 --> 00:39:22,590 nous les commandons par la post.date.descending. 743 00:39:22,590 --> 00:39:25,030 Et qui va préciser, lors ils viennent effectivement sur, 744 00:39:25,030 --> 00:39:29,250 le plus récent sera très premier. 745 00:39:29,250 --> 00:39:31,420 >> Et puis, nous passons cela en le modèle de home.html, 746 00:39:31,420 --> 00:39:34,240 nous allons donc ouvrir effectivement en place ce modèle vraiment rapide, 747 00:39:34,240 --> 00:39:36,760 et jeter un oeil à la façon dont ça fonctionne. 748 00:39:36,760 --> 00:39:42,130 Et ce ne sont pas très HTML, mais je l'espère, nous pouvons nous concentrer sur le Python. 749 00:39:42,130 --> 00:39:46,960 >> Donc, il ya un lien vers le Ajouter New Post, et si cela spécifie la route 750 00:39:46,960 --> 00:39:51,580 l'intérieur de la fiole que l'on définir, qui est ici. 751 00:39:51,580 --> 00:39:56,310 Ceci est la nouvelle route de poste, et nous précisons que ici. 752 00:39:56,310 --> 00:40:00,450 Et ce qui est un lien qui va ensuite aller sur ce parcours au sein du serveur Flask. 753 00:40:00,450 --> 00:40:03,820 >> La chose la plus intéressante est-ce pour la boucle ici. 754 00:40:03,820 --> 00:40:07,685 Donc, nous précisons que cette paramètre poste qui 755 00:40:07,685 --> 00:40:09,560 a été adoptée dans le fonction render_template, 756 00:40:09,560 --> 00:40:13,550 pour chaque poste dans le poste de objet qui est passé dans. 757 00:40:13,550 --> 00:40:16,600 Nous voulons imprimer le titre du poste, au 1er semestre, 758 00:40:16,600 --> 00:40:21,930 puis ci-dessous, nous voulons imprimer le texte de poste au sein d'un paragraphe. 759 00:40:21,930 --> 00:40:25,710 >> Et ici, nous pouvons réellement appeler une fonction Python, 760 00:40:25,710 --> 00:40:35,130 afin que nous puissions appeler strftime, ST-RF-temps, et vous pouvez passer dans la chaîne de format 761 00:40:35,130 --> 00:40:37,064 que vous voulez imprimer les données dans. 762 00:40:37,064 --> 00:40:39,980 Donc, il est assez agréable est que vous pouvez fait appeler cette fonction Python 763 00:40:39,980 --> 00:40:41,090 à partir de là. 764 00:40:41,090 --> 00:40:44,370 Vous ne devez pas faire la mise en forme sur du côté du contrôleur, parce que vraiment, 765 00:40:44,370 --> 00:40:47,770 le formatage de la date est quelque chose qui vous voulez traiter dans la vue. 766 00:40:47,770 --> 00:40:51,480 >> Et tout cela pour cent les choses ne sont pas super important. 767 00:40:51,480 --> 00:40:55,270 Si vous regardez la documentation pour la fonction strftime en Python, 768 00:40:55,270 --> 00:40:57,040 il précise tous ces choses, mais que de 769 00:40:57,040 --> 00:40:59,190 comment, quand nous étions à la recherche à la page d'accueil ici, 770 00:40:59,190 --> 00:41:04,440 il formate ce avec une belle A ce jour, et il spécifie AM ou PM, 771 00:41:04,440 --> 00:41:09,410 mais normalement, si nous ne pas avoir cette ici, 772 00:41:09,410 --> 00:41:14,024 vous aurez probablement quelques ordures date qui n'a pas l'air très bien. 773 00:41:14,024 --> 00:41:15,940 Et puis nous spécifions le post.text, et je pouvais 774 00:41:15,940 --> 00:41:19,460 ont mis un couple de sauts de ligne ici, 775 00:41:19,460 --> 00:41:21,820 de mettre des espaces entre chaque poste. 776 00:41:21,820 --> 00:41:26,270 >> Donc, je pense que le plus important chose dans cet exemple, 777 00:41:26,270 --> 00:41:28,697 est que vous pouvez utiliser cette boucle. 778 00:41:28,697 --> 00:41:30,780 Et ceci est analogue à choses que vous pouvez faire en PHP. 779 00:41:30,780 --> 00:41:32,905 Vous pouvez parcourir, tout se passa, 780 00:41:32,905 --> 00:41:36,719 et ainsi, au lieu d'avoir à faire copier / coller, copier / coller tous les fichiers HTML, 781 00:41:36,719 --> 00:41:40,010 vous avez juste à écrire une fois, puis vous pouvez itérer sur tous les postes. 782 00:41:40,010 --> 00:41:41,510 >> Et ceci est quelque chose commune que vous voulez 783 00:41:41,510 --> 00:41:44,510 à faire, lorsque vous avez un grand nombre de données, est que pour tout dans vos données, 784 00:41:44,510 --> 00:41:48,370 vous voulez faire quelque chose de semblable. 785 00:41:48,370 --> 00:41:51,690 Et puis, souvenez-vous, que lorsque vous vouloir imprimer quelque chose explicitement 786 00:41:51,690 --> 00:41:54,780 dans le code HTML, vous utilisez les doubles accolades ici, 787 00:41:54,780 --> 00:41:57,820 mais alors quand vous voulez spécifier quelques informations sur une condition, 788 00:41:57,820 --> 00:42:02,430 ou sur une boucle, vous utiliser le support pour cent. 789 00:42:02,430 --> 00:42:08,730 >> Donc, pour revenir à l'Python code, donc qui explique 790 00:42:08,730 --> 00:42:12,242 ce qui se passe dans la principale la route, quand on y va, 791 00:42:12,242 --> 00:42:14,450 il affiche simplement tous les les messages, mais alors la question 792 00:42:14,450 --> 00:42:17,440 est, comment pouvons-nous réellement les messages dans la base de données, qui 793 00:42:17,440 --> 00:42:18,970 est un peu plus intéressant. 794 00:42:18,970 --> 00:42:23,960 >> Donc, lorsque vous cliquez sur le New Poster lien, que nous avons vu ici, 795 00:42:23,960 --> 00:42:26,000 il vous redirige vers cette forme. 796 00:42:26,000 --> 00:42:29,580 Et cela est juste un simple appel à la fonction render_template, qui a ensuite 797 00:42:29,580 --> 00:42:32,110 passe dans le nouveau poste sous forme HTML. 798 00:42:32,110 --> 00:42:36,212 Donc, nous allons jeter un coup d'oeil. 799 00:42:36,212 --> 00:42:37,420 Alors celui-ci est assez simple. 800 00:42:37,420 --> 00:42:45,110 Il dispose d'un simple formulaire HTML, qui va chercher un peu familier, 801 00:42:45,110 --> 00:42:47,380 basée sur les formulaires dans CS50 Finances. 802 00:42:47,380 --> 00:42:49,940 Et donc, nous précisons ici, l'action. 803 00:42:49,940 --> 00:42:52,435 Et ici, si vous travaillez avec PHP, normalement, il 804 00:42:52,435 --> 00:42:55,930 serait quelque chose comme, create.php, mais ici 805 00:42:55,930 --> 00:42:59,960 nous spécifions en fait un itinéraire Flasque au sein du serveur. 806 00:42:59,960 --> 00:43:02,520 Et donc, cet axe correspond à la voie de créer 807 00:43:02,520 --> 00:43:05,680 que nous avons ici, qui Nous en discuterons dans un second. 808 00:43:05,680 --> 00:43:07,630 >> Et donc, nous précisons que il est une méthode de poste, 809 00:43:07,630 --> 00:43:09,820 parce que nous voulons envoyer ces données de formulaire, et généralement 810 00:43:09,820 --> 00:43:12,945 quand vous êtes l'envoi de données à partir d'un formulaire, vous pourriez vouloir utiliser une demande de poste, 811 00:43:12,945 --> 00:43:15,760 juste pour que vous ne finissent pas Avec ce gros, URL difficile à manier. 812 00:43:15,760 --> 00:43:18,970 Mais vous pouvez également utiliser une requête GET, et de le transmettre avec routage variable 813 00:43:18,970 --> 00:43:21,170 mais pour les formulaires, il est agréable à une demande de poste ici. 814 00:43:21,170 --> 00:43:24,620 Et alors, tout comme vous ferait avec HTML et PHP, 815 00:43:24,620 --> 00:43:28,420 vous pouvez spécifier ces entrées de texte, et vous pouvez spécifier le nom d'entre eux, 816 00:43:28,420 --> 00:43:33,490 et voilà le nom qui sera passé dans l'objet de la demande au sein de flacon. 817 00:43:33,490 --> 00:43:36,960 >> Et puis nous avons un Proposez bouton qui dit poste. 818 00:43:36,960 --> 00:43:40,760 Et ici, Post est le nom de la bouton, parce qu'il est un billet de blog, 819 00:43:40,760 --> 00:43:42,700 mais ici, poste est la méthode de requête. 820 00:43:42,700 --> 00:43:47,060 Donc, ce sont le même mot mais en fait aucun rapport. 821 00:43:47,060 --> 00:43:48,460 Oui 822 00:43:48,460 --> 00:43:54,800 >> Pour en revenir au code Python, quand nous avons appelé la méthode Create, 823 00:43:54,800 --> 00:43:57,702 remarquer ici que vous pouvez fait préciser dans le trajet 824 00:43:57,702 --> 00:44:00,650 les méthodes de requêtes que vous voulez accepter, 825 00:44:00,650 --> 00:44:04,770 et voici donc, je précise que je ne veulent accepter une méthode Post. 826 00:44:04,770 --> 00:44:09,800 Donc, si je fait essaie de visiter la page directement, qui utilise une requête GET, 827 00:44:09,800 --> 00:44:11,700 il va me dire "Méthode non autorisée." 828 00:44:11,700 --> 00:44:15,840 >> Et oui, vous avez des pages, un peu comme cette page créer, qui je suis seulement 829 00:44:15,840 --> 00:44:20,192 vraiment en utilisant comme un moyen pour le formulaire pour obtenir soumis, 830 00:44:20,192 --> 00:44:22,900 vous pouvez spécifier que vous ne le faites pas voulons que les gens soient en mesure d'y aller 831 00:44:22,900 --> 00:44:25,650 directement par l'intermédiaire d'une requête GET, ou si vous ne voulez pas, 832 00:44:25,650 --> 00:44:28,580 pour une raison quelconque, une demande Post, vous pouvez simplement spécifier arriver ici, 833 00:44:28,580 --> 00:44:32,720 mais dans cet exemple, nous venons veulent la demande Envoyer à sortir. 834 00:44:32,720 --> 00:44:38,700 >> Donc, quand create_post est appelé, quand nous visitons que via la demande Post, 835 00:44:38,700 --> 00:44:43,600 chaque fois que vous allez à un particulier itinéraire, il ya cet objet de la demande, 836 00:44:43,600 --> 00:44:46,640 et nous avons dû importer demandes tout en haut, 837 00:44:46,640 --> 00:44:49,640 mais il ya cette demande objet qui est passé dans, 838 00:44:49,640 --> 00:44:53,210 et vous pouvez accéder aux données de formulaire, qui va automatiquement se remplir 839 00:44:53,210 --> 00:44:55,070 lorsque vous envoyez une demande à partir d'un formulaire. 840 00:44:55,070 --> 00:44:56,990 >> Et puis, ce que je pense est vraiment cool, est 841 00:44:56,990 --> 00:45:02,840 que l'objet de formulaire pour obtenir passé dans, est juste un dictionnaire Python 842 00:45:02,840 --> 00:45:10,560 contient, si vous access-- alors voici, laissez- me tirer vers le haut le code HTML à côté de lui, juste 843 00:45:10,560 --> 00:45:17,670 de sorte que vous pouvez avoir ce que comme une référence, oui, de sorte 844 00:45:17,670 --> 00:45:21,060 les noms que nous spécifions ici pour les différents domaines, de sorte 845 00:45:21,060 --> 00:45:23,900 le titre et le texte, nous alors utilisez simplement les personnes de plus ici 846 00:45:23,900 --> 00:45:27,110 comme indices dans les données de formulaire. 847 00:45:27,110 --> 00:45:28,950 Voilà donc super pratique. 848 00:45:28,950 --> 00:45:33,320 >> Alors que nous appelons post.create, qui créera et insérer automatiquement 849 00:45:33,320 --> 00:45:36,850 ce nouvel objet de poste dans la base de données. 850 00:45:36,850 --> 00:45:40,690 Et je pense que cette fonction de création Voici un exemple de la façon vraiment cool 851 00:45:40,690 --> 00:45:44,900 puissant ballon est et travaille avec cela, parce que si vous faisiez quelque chose 852 00:45:44,900 --> 00:45:48,660 en PHP, vous pourriez avoir à faire beaucoup de validation, 853 00:45:48,660 --> 00:45:51,730 vous auriez à ensuite établir une connexion de base de données, 854 00:45:51,730 --> 00:45:55,210 vous auriez à ensuite exécuter la requête SQL, 855 00:45:55,210 --> 00:45:59,550 mais ici nous avons juste ce joli post.create, que nous pouvons alors juste 856 00:45:59,550 --> 00:46:01,520 obtenir l'information de l'objet de la demande, 857 00:46:01,520 --> 00:46:05,370 puis le passer à une nouvelle Post que nous créons. 858 00:46:05,370 --> 00:46:07,850 >> Et puis, la dernière chose que nous voulons faire, 859 00:46:07,850 --> 00:46:09,630 est de rediriger le utilisateur retour à la maison. 860 00:46:09,630 --> 00:46:13,020 Et si nous utilisons cette Flacon rediriger fonction. 861 00:46:13,020 --> 00:46:17,770 Et quelque chose que nous avait pas vu avant, était cette fonction URL. 862 00:46:17,770 --> 00:46:21,970 Donc, l'URL pour fonction permet vous passez en fait le nom 863 00:46:21,970 --> 00:46:26,090 d'une fonction dans votre code Python, plutôt que de la voie particulière 864 00:46:26,090 --> 00:46:26,720 qu'il est. 865 00:46:26,720 --> 00:46:32,107 >> Donc, je pouvais avoir aussi facilement redirigé un utilisateur de réduire, 866 00:46:32,107 --> 00:46:37,050 qui renvoyer à la maison, mais en utilisant l'URL pour la fonction est agréable, 867 00:46:37,050 --> 00:46:39,990 parce que si vous changez le endroit où les choses sont, 868 00:46:39,990 --> 00:46:44,080 alors disons que je change le maison soit dans / home à la place, 869 00:46:44,080 --> 00:46:47,040 Ce serait alors revenir encore / home, parce passe réellement et lève les yeux 870 00:46:47,040 --> 00:46:50,770 le nom de la fonction, et ce vous donnera de sauvegarder l'URL pour cela. 871 00:46:50,770 --> 00:46:52,490 >> Donc, en quelque sorte sur la hypothèse que vous êtes 872 00:46:52,490 --> 00:46:55,489 plus susceptibles de changer où les choses sont, que les noms des fonctions. 873 00:46:55,489 --> 00:46:58,840 Vous pouvez utiliser ce vraiment belle URL pour la fonction. 874 00:46:58,840 --> 00:47:02,470 Et une chose d'être conscient de qui est un peu délicat, 875 00:47:02,470 --> 00:47:05,750 est que vous pensez que vous pourriez juste appeler rediriger sur l'URL, 876 00:47:05,750 --> 00:47:10,600 mais en fait, tous les itinéraires ont pour retourner une sorte de texte et HTML, 877 00:47:10,600 --> 00:47:14,360 si vous avez réellement à retourner l'appel de redirection. 878 00:47:14,360 --> 00:47:18,379 Sinon, vous obtiendrez quelque chose invalide de ne pas retourner une chaîne, 879 00:47:18,379 --> 00:47:21,420 parce que toutes ces activités ont pour revenir le code HTML que vous voulez vraiment rendre. 880 00:47:21,420 --> 00:47:26,980 >> Et donc, lorsque vous appelez la redirection, il vous redirige vers la page, 881 00:47:26,980 --> 00:47:30,270 mais en réalité il renvoie le code HTML vous devez exécuter cette redirection. 882 00:47:30,270 --> 00:47:34,430 883 00:47:34,430 --> 00:47:37,110 Retournez à la page d'accueil. 884 00:47:37,110 --> 00:47:39,200 Nous avons donc ces deux points de vue différents. 885 00:47:39,200 --> 00:47:40,132 Nous avons la vue de la maison. 886 00:47:40,132 --> 00:47:41,590 Ou bien, je suppose que je devrais dire des modèles. 887 00:47:41,590 --> 00:47:44,190 Nous avons ces deux modèles, le modèle de la maison qui 888 00:47:44,190 --> 00:47:48,500 Affiche tous nos postes, et puis nous avons cette annonce chose, 889 00:47:48,500 --> 00:47:52,970 et lorsque vous cliquez sur le poste, il va à une nouvelle route dans le flacon, 890 00:47:52,970 --> 00:47:55,920 mais cette voie ne pas nécessairement un gabarit correspondant. 891 00:47:55,920 --> 00:47:59,290 892 00:47:59,290 --> 00:48:01,560 Vous ne devez pas voir quoi que ce soit, mais vous pouvez toujours 893 00:48:01,560 --> 00:48:04,090 ont ce travail va dans les coulisses. 894 00:48:04,090 --> 00:48:07,450 Et puis vous êtes redirigé Retour à la page d'accueil. 895 00:48:07,450 --> 00:48:12,230 Et certainement, il est facile de travailler dans certains CSS plus agréable dans le modèle 896 00:48:12,230 --> 00:48:15,580 et de faire ce look beaucoup plus agréable, mais l'ensemble de la logique principal 897 00:48:15,580 --> 00:48:18,590 il est dans le Python. 898 00:48:18,590 --> 00:48:20,020 >> Une question sur cet exemple? 899 00:48:20,020 --> 00:48:22,760 Je sais qu'il ya beaucoup de différentes choses qui se passent là-bas, 900 00:48:22,760 --> 00:48:25,341 beaucoup de choses que nous avions pas vu avant, mais comme tout. 901 00:48:25,341 --> 00:48:25,840 Oui. 902 00:48:25,840 --> 00:48:28,346 >> AUDIENCE 1: Avez-vous de faire quelque chose spéciale pour nettoyer les données qui 903 00:48:28,346 --> 00:48:29,600 venant de la forme? 904 00:48:29,600 --> 00:48:31,109 Je remarquai vous venez de dire "créer" 905 00:48:31,109 --> 00:48:33,900 EZRA Zigmond: Ouais, donc voilà effectivement, ce est un très bon point. 906 00:48:33,900 --> 00:48:36,350 Donc la question est, avez-vous besoin de vérifier et assurez-vous 907 00:48:36,350 --> 00:48:39,190 que les données sont valides, et faire toute sorte d'épuration 908 00:48:39,190 --> 00:48:41,840 pour vous assurer qu'il est valide, parce que comme vous pouvez le voir ici, 909 00:48:41,840 --> 00:48:42,660 Je ne fais pas ça. 910 00:48:42,660 --> 00:48:48,140 Voyons donc ce qui se passe si je poste quelque chose vierge. 911 00:48:48,140 --> 00:48:51,190 Donc, il va en fait juste faire un après vierge et remplir le DateTime. 912 00:48:51,190 --> 00:48:55,990 >> Donc, en réalité, vous auriez probablement vouloir faire quelque chose comme, 913 00:48:55,990 --> 00:49:04,749 peut-être préciser si le titre est égal à la chaîne vide, alors ne fais pas ça. 914 00:49:04,749 --> 00:49:07,290 Ou, que faire si le titre est pas égale à la chaîne vide. 915 00:49:07,290 --> 00:49:10,330 Donc, il ne fait pas automatiquement prendre soin de cette épuration 916 00:49:10,330 --> 00:49:12,820 pour vous, si vous avez encore besoin de le faire. 917 00:49:12,820 --> 00:49:14,330 Ouais, bonne question. 918 00:49:14,330 --> 00:49:18,497 >> AUDIENCE 2: Est-ce qu'il gommage pour l'injection de suite? 919 00:49:18,497 --> 00:49:19,890 Savez-vous? 920 00:49:19,890 --> 00:49:22,830 >> EZRA Zigmond: Espérons, peewee fait cela. 921 00:49:22,830 --> 00:49:25,830 Je pense que ce serait certainement un joli mauvaise bibliothèque si elle n'a pas fait cela. 922 00:49:25,830 --> 00:49:29,511 923 00:49:29,511 --> 00:49:32,690 Je ne sais pas exactement. 924 00:49:32,690 --> 00:49:34,820 Je dois regarder le requête qui a généré. 925 00:49:34,820 --> 00:49:38,980 Je pense que, si je tapais dans un blog ce genre de regardé 926 00:49:38,980 --> 00:49:46,370 comme une attaque par injection SQL, quelque chose comme cela, si ce 927 00:49:46,370 --> 00:49:49,370 est comme un champ de mot de passe ou quelque chose, vous pourriez faire quelque chose comme ça. 928 00:49:49,370 --> 00:49:53,410 >> Je pense que ce sera encore obtenir littéralement posté, 929 00:49:53,410 --> 00:49:59,200 mais je pense que peewee ne fait une sorte de lavage des données 930 00:49:59,200 --> 00:50:01,680 avant d'exécuter réellement. 931 00:50:01,680 --> 00:50:04,510 >> AUDIENCE 1: Ce champ de texte est conçu pour prendre le texte brut, non? 932 00:50:04,510 --> 00:50:05,710 >> EZRA Zigmond: Oui, il est. 933 00:50:05,710 --> 00:50:06,465 Oui. 934 00:50:06,465 --> 00:50:09,590 Donc, je pense que tout le, donc ce est comportement correct, qui va le faire, 935 00:50:09,590 --> 00:50:12,170 mais je pense que peewee ne espérons faire 936 00:50:12,170 --> 00:50:13,780 une sorte de protection sur leur fin. 937 00:50:13,780 --> 00:50:16,090 Et si vous vouliez vérifiez que, il 938 00:50:16,090 --> 00:50:19,530 des façons lorsque vous générez une requête. 939 00:50:19,530 --> 00:50:22,622 de sorte que vous ne devez pas l'exécuter directement. 940 00:50:22,622 --> 00:50:24,330 Je dois prendre un examiner la documentation, 941 00:50:24,330 --> 00:50:27,930 mais vous pouvez réellement voir le SQL qu'il génère, 942 00:50:27,930 --> 00:50:30,840 et jeter un oeil à ce que, et de faire vous qu'il est des choses échappe. 943 00:50:30,840 --> 00:50:33,700 >> Une autre raison pour laquelle vous pourriez vouloir regarder le SQL 944 00:50:33,700 --> 00:50:37,920 que peewee est délivrer, est si les choses semblent aller très lentement, 945 00:50:37,920 --> 00:50:41,090 vous pouvez jeter un oeil et voir ce qu'il est en train de faire, car il est parfois 946 00:50:41,090 --> 00:50:44,670 facile d'ajouter accidentellement dans, la façon dont vous l'écrivez, 947 00:50:44,670 --> 00:50:47,880 vous pouvez avoir accidentellement sélectionner toute la première base de données, 948 00:50:47,880 --> 00:50:50,230 puis effectuez une opération de tri à ce sujet, quand vous avez vraiment 949 00:50:50,230 --> 00:50:51,320 destiné à sélectionner un sous-ensemble. 950 00:50:51,320 --> 00:50:53,560 >> Et donc, si les choses ne sont pas tout à fait d'aller à droite, 951 00:50:53,560 --> 00:50:57,300 il est bon de jeter un oeil à la demande qui devient effectivement généré. 952 00:50:57,300 --> 00:50:57,800 Oui. 953 00:50:57,800 --> 00:51:02,100 >> AUDIENCE 2: Quand vous avez commencé, vous mettez dans le port 5000. 954 00:51:02,100 --> 00:51:02,904 >> EZRA Zigmond: Ouais. 955 00:51:02,904 --> 00:51:06,070 AUDIENCE 2: Est ce que le défaut avec peewee, ou est-ce quelque chose que vous pouvez changer? 956 00:51:06,070 --> 00:51:10,870 EZRA Zigmond: Oui, de sorte que le port par défaut est avec Flask. 957 00:51:10,870 --> 00:51:13,061 Si vous l'exécutez sans spécifiant rien, 958 00:51:13,061 --> 00:51:14,310 il le fera automatiquement. 959 00:51:14,310 --> 00:51:16,060 Je crois, je dois de doubler le vérifier, 960 00:51:16,060 --> 00:51:19,130 mais vous pouvez spécifier que dans le app.run, Je pense que vous pouvez faire quelque chose comme, 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 Donnons qu'un Essayez Real rapide. 964 00:51:23,750 --> 00:51:29,100 965 00:51:29,100 --> 00:51:32,230 Ouais, donc vous pouvez simplement spécifier port = 8080, et il sera capable de là, 966 00:51:32,230 --> 00:51:36,130 qui, je pense, si vous voulez l'exécuter sur l'IDE, je ne l'ai pas essayé cette solution, 967 00:51:36,130 --> 00:51:38,527 mais je pense que si vous il a couru sur le port 8080, 968 00:51:38,527 --> 00:51:40,360 vous seriez probablement en mesure pour accéder au serveur, 969 00:51:40,360 --> 00:51:41,870 comme si vous étiez pour le site. 970 00:51:41,870 --> 00:51:44,390 >> Ouais, mais il est facile à changer que si vous 971 00:51:44,390 --> 00:51:48,540 avoir un peu comme port-forwarding choses que vous devez faire. 972 00:51:48,540 --> 00:51:50,410 >> D'autres questions? 973 00:51:50,410 --> 00:51:50,916 Oui? 974 00:51:50,916 --> 00:51:53,416 AUDIENCE 1: Alors, je l'ai vu dans votre modèles qui, comme vous le mentionnez, 975 00:51:53,416 --> 00:51:55,647 vous devez spécifier le base de données pour chaque objet. 976 00:51:55,647 --> 00:51:58,105 Ne vous arrive de connaître, ne qui font qu'il est vraiment facile si vous 977 00:51:58,105 --> 00:52:03,210 avoir beaucoup de bases de données SQLite que vous souhaitez utiliser pour une application Web unique, 978 00:52:03,210 --> 00:52:07,210 que vous ne pouvez spécifier un tas de différentes celles de votre modèle? 979 00:52:07,210 --> 00:52:11,620 >> EZRA Zigmond: Oui, permettez-moi ouvrir que jusqu'à très rapide. 980 00:52:11,620 --> 00:52:17,570 Donc, vous dites, si vous voulez avoir un tas de autre chose, peut-être 981 00:52:17,570 --> 00:52:22,670 aimer et les étudiants, pour certains raison, quelque chose comme ça? 982 00:52:22,670 --> 00:52:26,870 Ouais, donc je pense que vous avez encore, chaque modèle 983 00:52:26,870 --> 00:52:30,652 devrait avoir encore juste une base de données qui lui est attribué, 984 00:52:30,652 --> 00:52:32,610 mais si vous voulez avoir différents modèles qui 985 00:52:32,610 --> 00:52:35,818 ont des objets de base de données différents assigné à elle, vous pourriez certainement le faire. 986 00:52:35,818 --> 00:52:43,070 Donc, si je créé une nouvelle, quelque chose comme ca, 987 00:52:43,070 --> 00:52:47,000 et maintenant cela est un étudiant qui ressemble étrangement à un billet de blog, 988 00:52:47,000 --> 00:52:49,390 Je pourrais préciser que le base de données est égal à db_2 ici. 989 00:52:49,390 --> 00:52:51,390 Donc, je pense que ce la principal moyen que vous pouvez faire cela. 990 00:52:51,390 --> 00:52:54,560 991 00:52:54,560 --> 00:52:56,200 >> Cool. 992 00:52:56,200 --> 00:52:58,410 D'autres questions? 993 00:52:58,410 --> 00:53:02,170 >> Donc, juste pour finir un peu peu, voici quelques ressources, 994 00:53:02,170 --> 00:53:06,030 et ces diapositives seront affichés en ligne de sorte que vous pouvez réellement obtenir ces liens. 995 00:53:06,030 --> 00:53:08,500 Les meilleures ressources sont vraiment la documentation, Flacon 996 00:53:08,500 --> 00:53:09,930 et se peewee. 997 00:53:09,930 --> 00:53:12,940 Ils sont vraiment bien écrits, je pense. 998 00:53:12,940 --> 00:53:18,180 Ainsi, le site Flask est ici, et ils ont un tutoriel de démarrage rapide que 999 00:53:18,180 --> 00:53:20,710 va marcher à travers similaire les choses à ce que je traversais, 1000 00:53:20,710 --> 00:53:23,560 mais si vous voulez toute sorte de révision des choses que je suis allé, 1001 00:53:23,560 --> 00:53:26,200 ou si vous pensiez que je l'ai expliqué quelque chose d'une manière confuse, 1002 00:53:26,200 --> 00:53:28,390 ils auront des exemples similaires il. 1003 00:53:28,390 --> 00:53:31,570 >> Peewee dispose d'une documentation, et ils ont un tutoriel de démarrage rapide 1004 00:53:31,570 --> 00:53:34,650 qui va sur les principaux paramètres que vous souhaitez utiliser. 1005 00:53:34,650 --> 00:53:38,900 Donc, les choses que je parlé avec les uniques, et précisant les valeurs par défaut, 1006 00:53:38,900 --> 00:53:42,710 les différents types de champs vous pouvez utiliser, ceux qui seraient tous là. 1007 00:53:42,710 --> 00:53:44,690 >> Aussi, si vous avez questions sur peewee, 1008 00:53:44,690 --> 00:53:47,530 et vous les afficher sur stackoverflow, le gars qui fait effectivement peewee 1009 00:53:47,530 --> 00:53:49,500 passe et répond à ceux parfois. 1010 00:53:49,500 --> 00:53:53,200 Si vous avez une question, je l'espère il sera en mesure d'y répondre, 1011 00:53:53,200 --> 00:53:54,867 parce qu'il a écrit la chose entière. 1012 00:53:54,867 --> 00:53:56,700 Je pense que ce tout Je voulais couvrir. 1013 00:53:56,700 --> 00:53:58,930 Merci d'être venus. 1014 00:53:58,930 --> 00:54:02,688