[音楽再生] エズラZIGMOND:こんにちは、誰もが。 今日出てきてくれてありがとう。 このセミナーでは、「Pythonのです Webがフラスコであるアプリです。」 だから、私は話をするつもりです 理由について少し あなたが作るためにフラスコを使用することもできます 対照的に、ウェブは、Pythonを使ってアプリ そこにいくつかの他のフレームワークのように 最もよく知られているジャンゴ、。 サブタイトルは "と 何かあるピーウィー、 " 私たちはどのようにについて話をするつもりです SQLデータベースと対話します。 それは本当に素敵になります。 だから、ここだけで簡単に説明です 私はオーバーに行きたいものの。 そこで、まず、一つだけのスライド それは、クイックスタートになるだろう これは、すべてを取得する方法です お使いのコンピュータに設定します。 私が実証するつもりです この私のローカルのMacマシン上で、 それはちょうどので、私はこれをやったところ 前、私は、それを最も快適です しかし、これは間違いです CD50 IDE上で可能。 だから、その後、私がしたいです フラスコが何であるかを紹介し、 そしてなぜあなたがすべきあなたを納得させます 最初の場所でそれを使用します。 それから、私は迅速をあげます 何の例 フラスコ、簡単な例で行うことができます あなたはおちびさんに何ができるかの、 そして私はあなたより多くが表示されます 完全なアプリケーション例 私たちことを一緒に入れていること 一緒に歩くことができます。 そして最後に、中 私が持っている最後のスライド、 あなたが見て、いくつかのリソース 詳細については、オンラインで。 これは完全ではありません フラスコを使用する方法のチュートリアル。 そして、私は残すことを願っています 質問のためのいくつかの時間。 誰もがちょうど、ローカルで見て 以下のように、途中で叫びます ご質問がある場合。 だから、クイックインストールのもの、 あなたが一緒にフォローしたい場合は、 またはあなたはこれを取得したい場合 自分のマシン上のアップ、 私は、Python 2.7.10を使用するつもりです。 フラスコに動作しません Pythonの3が、私は好きです そこだから、Pythonの2を使用して そのいくつかのPythonパッケージ まだ3では動作しません。 あなたがピップインストールしている場合、どの Pythonのパッケージマネージャであり、 あなたのPythonがある場合、私は思います 以上2.7.9に等しく、 あなたはそれがすでにインストールされている、それはです これらのパッケージをインストールするには超簡単。 あなたがインストールピップを行うことができます フラスコ、ピーウィーをインストールピップ、 通常、あなただけのsudoを実行する必要があります 許可が出て動作するように。 そして、あなたが使用している場合、 スーパーのPythonの古いバージョン、 私は、あなたのPythonを更新することをお勧め またはピップをインストールするには、EasyInstallを使用。 そこで、次の質問は、フラスコは何ですか? そして、私は最初に、推測します 私は疑問に思いました合理的な質問 長い時間があるため、Webアプリは何ですか? そのためには私が言葉です たくさんの周りに投げていると思います 私は本当に知らなかったこと。 そして、私は最高のことを考えます Webアプリが何であるかの例、 本当にCS50ファイナンスであり、 それは、本当にただのウェブサイトではありません それはあなたのものです ソートのと相互作用することができます。 ユーザーアカウントがありますし、 異なるあらゆる種類のもの。 だから、場所を正確にあなたが描きます ウェブサイトであるものとの間のライン、 ウェブアプリは、どのようなのです 任意ですが、私は考えを推測します、 それはウェブサイト以上の何かです それは便利なアプリケーションです。 だから、フラスコをするためのフレームワークです Pythonを使ってWebアプリを作ります。 うまくいけば、年末までに このことから、私はあなたを説得します あなたが実際に何かを書くことができること 私はPythonを使用してCS50ファイナンスなど 個人的には、PHPより多くの方のように。 だから、フラスコは、彼らが呼びます マイクロフレーム、これにより、 彼らはそれが非常に意味です シンプルですが拡張可能。 だから、それはあなたが必要なものだけ持って、 しかし、あなたはより多くの機能が必要な場合は、 それはそれらをもたらすために簡単です。 しかし、それはちょうどので、 マイクロフレームは、しません それは小さなプロジェクトのためだけだということを意味します。 私が言うここにリンクを持っています オバマ氏は2012年にフラスコを使用したこと 彼のキャンペーンのための ウェブサイト、うまくいけば、 裏書のようなものです。 しかし、私の事を 本当にフラスコについては好き それは本当にありません、ということです あなたのための意思決定の任意の並べ替え。 我々はしているという理由だけで Webアプリの話、 私は、Rubyの上にそれを比較する必要があります RailsとDjangoの、その両方 偉大なフレームワークですが、 彼らは両方の仮定を行います あなたがしたい方法について データベースと対話、 どのようにあなたがあなたを提示したいです ビューは、彼らは間違いなくね それに良い面。 例えば、RubyのRailsの上 このアクティブなレコードシステムを持って、 これは本当にいいです データを操作する方法、 しかし、あなたは上のRubyを使用する場合 Railsは、あなたは一種のそれに縛られています。 しかしフラスコで、私はよなど ピーウィーであなたを示し、 あなたはどのようなソートを使用することができます データベースのあなたがしたいです、 あなたはちょうどそれで引くことができます フラスコに拡張として。 だから、なぜ私は本当にです フラスコのように、それはそれということです あなたのための仮定をしません 物事に基づいて、あなたが本当に必要としません。 では、なぜあなたはフラスコを使用する必要がありますか? 利点はそれだけで、あります 本当にコア機能を備えています それに組み込まれて、あなたは必要とすること。 だから、あなたは心配する必要はありません 物事の全体の束を理解します あなたが本当に必要としないこと。 あなたが心配する必要はありません 機能をオフにすることについて あなたが本当に必要としないこと。 私が述べたように、それはスーパーです 物事の拡張機能を追加するのは簡単 あなたは必要ないということ。 それらのいくつかは、フラスコを有し そのための独自のサポート。 だから、フラスコと呼ばれるものがあります その管理を反映して、管理、 Djangoは提供してパネル、 これはあなたに素敵な視覚的な方法を提供します あなたのウェブサイトを管理します。 しかし、再び、あなたがしている場合 シンプルなものを作り、 あなたはおそらく、大きな管理を必要としません パネルは、私はそれが超素敵だと思います。 そして欠点は、そのあります あなたは箱の外に少ない電力を持っています。 だから、あなたが最初にフラスコを開くとき、 あなたのPythonプログラムで、 あなただけのフラスコから入力します 輸入*、または何でも、 あなたが正確にすべてを得ることはありません 機能を使用するには、お勧めします。 だから、あなたは、より明確に持っています 必要な機能をリストします。 だから、一つの欠点だが、私 ことは、小規模なWebを構築するためだと思います 私のようなアプリは表示されようとしています あなたは、それは本当に問題ではありません。 そして最後の事は何ですか タイプミスである、と言うことになって、 以下の標準化があるということです フラスコを使用する方法の規則、 同じように多くはありませんので、 専門的にそれを使用する人々 ジャンゴと比較。 だから、あなたのようなものを見れば、 ジャンゴで「どのように私はXを行うのですか」、 あなたはおそらくそれを見つけることができます。 良いデザインがあります あなたが使用できるパターン、 しかしフラスコで、それはです ソートの独自の道を行きます、 それはちょうどので、 かなり小さなライブラリ。 だから、それらは、 欠点は、私は思います ことそれはまだ使用することをおライブラリです。 それでは、ちょうどフラスコにジャンプしましょう​​。 これは間違いないだろう 完全なチュートリアルであるためには、 しかし、それはあなたのアイデアを与えることです 物事を構造化する方法の、 そしてあなたが行く快適に感じます オフとマニュアルを見て および多くを見つけます。 だから、私は本当に開放しましょう 最初は簡単な例、 あなたは何をすることを示します 以下のように見え、その後、我々はよ もう少しそれを打破します。 だから、これはここで、私はそれが動作して取得してみましょう。 だから、私は今、自分のアプリケーションを実行しています。 私はサファリを開くつもり、とよ それは私のローカルホストで実行されています。 だから、僕はこれを大きくするつもりです。 しかし、ローカルホスト:5000 だから、今、このすべてのことを行い である、あなたがウェブサイトを訪問するとき、 それは「こんにちは、フラスコ」を出力します これは、超便利ではありません 私はそれがことをクールだと思います ここで、この小さなファイルで、 我々は、Webサーバーを実行しています それが何かを印刷しています。 それでは、実際に見てみましょう 第二のコードでは、 そして、少しそれを打破します。 サイズはここに皆のための良いですか? だから、うまくいけば、あなたはいくらかです Pythonを使用して快適。 私たちが見ることができることを仮定しています Pythonとは、それをお読みください。 あなたはについてのご質問がある場合 何でも、私はまた、その上を行くことができます。 だから、最初の行は、フラスコから、です、 私たちは、大文字の "F"で、フラスコをインポート これはすべての一種であります あなたが必要とする重要な機能。 あなたが書いているときはいつでも ファイルフラスコを使用して、 あなたはそれをインポートするつもりです、 それはすべての主要なものを持ってという理由だけで。 私たちは次のことは、私たちです ただ、この機能のフラスコを呼び出します アプリのオブジェクトを作成し、あなたがしているします 常にそれを行うためにするつもり。 そして、までジャンプ 一番下はすぐに、この部分はここにあり、 'でのif_name _ == "_ main_"' Pythonの慣習のようなもの。 だから、これはあなただけあれば実行されます Pythonを使ってこのファイルを直接実行します。 その後、我々は意志、app.run呼び出します 実際に起こってアプリを起動。 だから、それがその主な構造です あなたは、任意のフラスコアプリケーションであるでしょう、 あなたがこれを持っているということです アプリ=フラスコ(_name_)、その後app.run。 私が持っているので、二つのこと ここで、我々はルートを呼んでいるものです。 それでは、についてお話しましょう もう少しルーティング。 私は戻ってスライドに行きますよ。 だから、最も基本的な フラスコ内の概念がルーティングされます。 そして、それはあなたのアイデアです Pythonで機能を割り当て 特定のアドレスへ あなたのウェブページ上。 だから、いつでも好きなときに 新しいルートを作成するには、 あなたはこの@のapp.routeを使用 関数デコレータ。 だから、あなたがに慣れていない場合 Pythonでの関数デコレータ、 それは、この考え方です あなたは関数を取ることができます そして何か他のものとそれを囲みます。 だから本当に、このデコレータが何をしますか、 それ以下の機能を取ることです、 そして、それはより多くの情報を追加 それへのが、何フラスコ実際 それが実現するんは、スーパーではありません 重要な、しかし重要なことは、 それはあなたが、ルートの前にあります この@のapp.routeを入れ、 ルートのアドレス、 そうスラッシュは私たちです 我々だけでWebページを開いたときに見ました。 だから、ホームページです。 それはちょうどスラッシュルートです。 そして、あなたはこの機能を持っています。 関数の名前 あなたが好きなことができます。 それは、必ずしもする必要はありません ルートで行う必要があります。 そして、どのような 関数の戻り値、 関数は文字列を返す必要があります。 そして、その文字列のことができ 、HTMLまたは何かが含まれています そしてそれは何を取得します実際にあります HTMLとしてWebブラウザに戻って、 そして、それはそれをレンダリングします。 だから、これは同じコードであります それは例からでした 我々はスラッシュを訪問するとき、私はちょうどので、実行されたこと、 それは、Hello Worldの関数を呼び出します 単なる文字列こんにちは、フラスコを返し、 それは、画面に印刷されます。 だから、別の例があります、 あなたが訪問したときにハロー/、これは、 それは、ハローWordをプリントアウトします 実際に、Hello Worldのを言う必要があり、 しかし、それでは、それは意図的なものであったふりをしてみましょう。 それでは、実際に素早くそれをプルアップしてみましょう。 ですから、ハロー/ localhostに行けば、 それが今、何か他のものを印刷します。 だから、どのようにのちょうど簡単な例です 次の2つの異なる経路を作成することができます。 そこで、これまでのところ、これは、超便利ではありません あなたが行うことができます全体の多くはありません、 あなただけですべてのことを行うことができます 別のHTMLページを有します あなたが特定の訪問時 ページそれだけでページを読み込みます。 それでは、いくつかの詳細を見てみましょう あなたがすることができる便利なもの。 あなたが持つかもしれないそれで、一つのこと 私が引っ張っ例に気づきました アップ、私はapp.runていたことである(デバッグ=真)。 だから、何この デバッグ引数は、ありません あなたのWeb​​サーバを実行するときに、 あなたがあなたのアプリケーションにいるとき、 あなたがファイルを変更した場合、それはなります 自動的にサーバをリロードします。 だから、あなたは実際にはありません 超便利であるPythonを、再起動します。 私はそれを表示することができます。 私は私のコードをプルアップしてみましょう その中にタイプミスと、 その誤植がそこに置かれたふり 意図的に有益な目的のために。 それでは、このバックを追加してみましょう。 だから今ではHello Worldのは述べています。 私はそれを保存します。 そして、我々は戻ってプルアップ場合 ターミナル、あなたはよ それが再起動だと言います、 それは変化を検出したため、 そして今、私たちは、このページをリロードしたとき それが正しいことを出力します。 だから、デバッグは、そのための超便利です。 また、あなたがいずれかを持っている場合 クラッシュのようなものなので、 私は、このアプリケーションをクラッシュさせてみましょう 持っていることによって、それは文字列を返さありません。 だから、それを持ってみましょう 何らかの理由でNoneを返します。 そして私はこれを訪れたとき ページ、それだけでクラッシュします、 しかし、サーバはただ、それをクラッシュしません 実際にあなたに超便利バックを与えます 間違っていたすべてのトレース。 そして、本当に良いものをということですよ このバックトレース内の任意の段階で、 あなたがインタラクティブを開くことができ ここでは、シェル、および並べ替えの何を印刷 変数あなたはを見てみたいです。 だからデバッグが実際にあります 把握するのに有用 何あなたに起こっています サーバーだけではなく、見て 500内部のようなPHPで何か スーパー無用であるサーバエラー、。 注意すべきことの一つは、あります そのあなたがオンラインであなたのアプリを置く場合 それは、あなた公衆に見えるのです 、上のデバッグモードを残しておきたいことはありません 人々が実際に可能性があるため 私そのコンソールを使用します 任意のコードを実行することを示しました。 そこで、彼らはどのように印刷することができます あなたがそこに持っている秘密のコード、 彼らは正確に見ることができます どのようにあなたのウェブサイトは正常に機能しています。 だから、本当に便利です 試験のため、常に 前にそれを取るようにしてください あなたは、オンラインで何かを公開します。 だから、何かを使用しているとき PHPのように、このアイデアがあります あなたが渡すことができること ウェブページとの間の情報 実際に情報を置くことによって GETリクエストされたURLで、 しかしフラスコ中で、あなたが実際にすることができます ソートのような何かを、 持っているルートを持つことにより、 その一部として変数。 だから、これを見た場合 ここでは、画面上の例では、 我々はだルートを持っています ( '/こんにちは/')、およびので、あなたが訪問すれば /こんにちは/何か、その何か 実際にいっぱいになるために起こっています 名前の変数に。 そして、関数ことに気付きます それは、そのルートが付属しています パラメータに取る必要があります 名前、それは実際になるように 関数に渡されます。 そして、一度あなたがしています その関数の内部で、 あなたのようなことを扱うことができます 通常のPython変数、 そのため、その後、それはなります こんにちはプリントアウトして、それ 使用して名前を記入します いくつかの文字列フォーマット。 だから、ルーティングに可変部分を追加するには、 あなたは、マーキングアングルブラケットを使用しています。 そして、必要に応じて、あなたが使用することができます コンバータ何と呼ばれています。 だから、あなたがこれを置く場合 コロンと注釈、 あなたはそれがだと指定することができます int型、または浮動小数点数、またはパス、 それが自動的にそれを変換します。 また、変換を行うことができます Pythonの関数内で、 ただキャストを使用することにより、時には場合 あなたはそれがint型だことを確認したいです、 あなたはそれを置くことができます そこでの変換ルール。 それでは、例をプルアップしましょう いくつかの変数のルール。 だからここに、これは基本的に同じを持っています フラスコのインポートからと構造 フラスコ、アプリ=フラスコ(_name_)、 そして、それは最後に実行しています。 我々は、さまざまなこれら二つを持っています ここでは、変数のルート。 そして最初のものは、あります 私が示した1 ことでしたスライド、中 それだけで文字列名を取り込み それは、ハロー名を出力します。 そして、第二 一つは、変換を使用しています。 だから、これはそれを自動的に変換します intにし、その後、整数を倍増 し、それをプリントアウト。 そして、我々は、任意の並べ替えをしません その中の変換 フラスコはそれの世話をするため。 それでは、このランニングを取得してみましょう。 あなたはフラスコを持っている場合 実行中のアプリケーション、 あなたはそれのうち-Cを制御することができます サーバーの実行を停止します。 そして、私は、変数を実行します。 それでは、localhostに手放す/こんにちは/エズラと うまくいけば、これは私に挨拶します。 だから、変数に、私の名前で取りました ルートは、それは、ここでそれを充填しました。 だから私も迅速を紹介 倍増の例。 だから、二重/ 3 /に行けば、 それが6をプリントアウトします。 これはの世話をしました 私たちのために変換。 だから、あなたもでそれを行うことができます フロート、そして特別な何か、 あなたのようなものを指定する必要がある場合 それはスラッシュを受け入れることができますパス、 それは、通常は問題にはなりません。 これまで我々は、まだ持っています ちょうど戻っされて 非常に興味深いものではありません文字列。 私たちは、実際に返すことができます リテラルHTML文字列。 だから、コードの中で、私たちは何かを挿入することができます B-タグは、太字にしたいです、 しかし、ほとんどの時間をあなたに 実際にはしたくありません HTMLコードを書くことにします Pythonコードインチ それは、本当に厄介取得します そして、それは良い時間はありません。 フラスコは、私たちが分離することができます テンプレートと呼ばれるものに、HTML、 もしそうであればあなたが考えています MVCモデルの観点から あなたが精通していること、 うまくいけば、作業から CS50ファイナンスと少し、 あなたは、Pythonファイルと考えることができます コントローラ、より多くのであるとして 彼らは何でもと相互に作用しています あなたが持つかもしれないデータモデル。 そして彼らは、ビューに出て呼び出しています そのビューに情報を渡します 情報を入力します HTMLでそれが必要なこと。 そして、我々は、これらのビューを呼ぶもの クラスのテンプレートがあります。 だから、フラスコを別のPythonを使用しています モジュールが自動的になりますこと インストールピップ時インストール フラスコは、神社と呼ばれます あなたはこれらを追加することができます HTMLに注釈 あなたが画面に表示されること、それはすることができます あなたは、条件文のようなものに入れて そして、HTMLにループします。 だから、どのようにあなたのように少し見えます HTMLファイル内でPHPを使用する場合があり、 しかし、これはちょうどその時フラスコです サーバーは、HTMLファイルを提供しています それはこのテンプレートエンジンを実行すると、 このを解析し、で物事を埋めます。 だから、フラスコをrender_template機能を持っています ここ一番下に見ることができます。 だからあなたがこのページを訪問したとき、それは このhello.htmlテンプレートをレンダリングすることになります、 そして、このHTMLページに記入してください。 それでは、ちょうどこの本当を実行してみましょう 素早く、そしてそれがどのように見えるかを確認、 そして私は通って行きますよ より詳細に少し。 だから、あなたのテンプレートを行っています Templatesフォルダに移動します。 それは自動的に範囲内になります テンプレートは、そのテンプレートのフォルダ。 それでは、これを開いてみましょう。 だから、私はテンプレートの例を実行します。 だから私は/こんにちは/エズラに行けば、 それは、この恐ろしいを有し、 私は中に入れ不快マーキータグ。 非常にダイナミックな、非常に素晴らしいです。 私は大ファンです。 しかし、何が起こる場合 私はちょうど、/ハローに行きますか? だから、ただのHello Worldは述べています。 私は、それを名前に合格しなかったと それが自動的にそれを埋め。 だから、それをしたかを見てみましょう、どのように 我々は多分そのマーキーを取り除くことができます。 だからここに、これは一種のです の興味深い例、 あなたはどのようにスイッチに精通している場合 文は、言語で動作します。 これは一種のようなものですと言います、 秋の並べ替え、 あなたは、実際には2つの添付場所 同じ関数への​​異なるルート。 だから我々は/ハロールートを添付し、 こんにちはへ/ハロー/名ルート、 Pythonはあなたをすることができますusing--、我々は指定します デフォルトの関数を指定arguments-- そうは名前がそう、存在しない場合 私たちは/ハローに行けば、 それは自動的にフィルタします 名前になしに等しいです。 それでは、私たちはレンダリング 名前=名前のテンプレート、 そのためには、nameパラメータに渡します この名前の関数のパラメータに等しいです、 テンプレートに挿入します。 それはまだどのように説明していません。 Hello Worldのを印刷するかどうかを決定します、 または私の名前を印刷します。 それでは、実際に見てみましょう テンプレート自体に、 それがどこから来ていると表示されます。 だから、このテンプレート内で、我々 実際にいくつかの条件付きロジックを持っています、 これは一部の人がう 実際に、主張 条件の多くを持つべきではありません テンプレート自体の内部ロジック。 それは内よりでなければなりません コントローラが、この例のために それはかなり小さなものです。 名前のであれば、ここで、我々はそう、確認してください 名前なしに等しくない場合、 名前は実際にある場合 渡されたし、我々はなります こんにちは言う、名前で ヘッダーとマーキー、 このすべての通常のHTML、それ以外の場合は、我々がします ただ普通にこんにちは、世界をプリントアウト。 だから、カップルの事はここで注意すべき あなたがテンプレートをフォーマットする方法については、 これらの、そのすべてであります 条件文、 ソートの私たちはときにそれをどのようにPHPのような あなたはいくつかのPHPを挿入します、 あなたはより小さい質問を使用 マークは、それがここに一種の類似です {%でした。 そこでここでは、我々は我々の条件コードを持っています。 そして、あなたが実際にしたいとき 文字通り何かを評価し、印刷 画面にそれ出て、あなた 二重中括弧を使用しています。 そこでここでは二重の中括弧は、 し、我々は名前を指定し、 その結果、内、それが評価されます 変数名に、どの から渡されました テンプレート関数をレンダリングし、 いうだけ印刷より アウト、我々はこれらを処分した場合には、 それは言葉だけプリントアウトだろう "という名前を。」 だから、それがために注意すべきものです。 だから、別のものに 通知は、そのときに我々です 使用したいです render_template機能、 私たちは実際にインポートする必要があります それ明示的にフラスコから。 そして、これは一例です フラスコのモジュール、 あなたがインポートする必要がないこと あなたが必要としないもの。 あなただけに持って来ることができます 機能実際に 時々である、必要があります 素敵なので、あなたはしないでください すべてのこれらの機能を持っている必要があります あなたが使用していないことを周りに座っ、 だけでなく、あなたがいることを忘れてしまった場合 render_templateをインポートする必要があり、 あなたは、おそらく警告を取得します それはあなたがそのことについてお知らせします。 だから、それはテンプレートです。 だから、私たちはどのように示されてきました 簡単なWebページを作成し、 とにもう少しロジックを追加 それは、変数ルーティングの点から好ましいです。 それはあなたがに基づいて異なることを行うことができます あなたは、その後も移動し、URL、与えます でHTMLもう少し意味 あなたは物事をレンダリングする方法の観点から。 あなたはすべて配置する必要はありません あなたのPythonでのHTML、 しかしほとんどのために すべてのWebアプリケーション、 あなたはいくつかの並べ替えをするつもりです それに関連したデータモデル。 それで伝統的に、これがでしょう SQLデータベースのようなものです。 そして、あなたは単に対話することができます 直接SQLを使用しました。 Pythonは、持っている私は、それが呼び出されていると思います。 SQLiteの3。 あなただけのSQLite 3をインポートすることができますし、 直接SQLクエリを実行し、 しかし、私はあなたのことは知りません、 私は実際には、好きではありません、 SQLクエリを書き出します。 それは本当に取得する傾向があります 長く複雑。 だから、その何か 私が使用するようなものだものです あるORMとして知られています オブジェクトリレーショナルマッピング。 との点 オブジェクト・リレーショナル・マッピング、 二つの異なるがあるということです あなたがデータベースを考えることができる方法。 例だから 教授マラン通常 クラスで使用し、Excelの表は、あります あなたはこれらの行とこれらの列を持っています、 それは本当に便利です それは、SQLでどのように表現されますか そしてあなたはそれをどのように相互作用するかが、 それが実際だ別の方法 時にはそれについて考えるのに便利、 クラスとオブジェクトに関するものです。 だからではなく、思考の 各テーブルの持つものとして 特定の持っているこの行 情報、あなたが実際にすることができます であるとしてそれを考えます 各テーブルにはクラスであり、 の、その後、すべてのインスタンス このクラスは、特定の特性を有します。 のので、この例では、インスタンス クラスは、テーブル内の行であり、 して、各プロパティには、希望 表の列です。 だから、私が好きなのORM おちびさんと呼ばれて使用しています。 それは一種のフラスコのような、本当に小さいです。 私は、彼らが一緒にうまくいくと思います、 しかし、他のORMがたくさんあり​​ます あなたが使用することができます。 より一般ものです SQLAlchem​​yのとして知られています、 私はなぜ私もともと覚えることができません 、SQLAlchem​​yの上でピーウィーを選びました または私はなぜ私あなたを言うだろう それは最高のものだと思います、 しかし、私たちはこれを使用するつもりです 1私はそれを使用する方法を知っているので。 そこで、一つの質問は、なぜです あなたはORMを使用して気にする必要があり、 だけではなく、直接の SQLクエリを記述しますか? そして、私は最高のケースを考えて、 あなたが実際にしないことです SQLクエリを記述する必要があります。 私はあなたが表示されますように、それはするには、はるかに簡単です 選択、挿入のようなものを行うには、 削除、特にテーブルを作成します。 それはにずっと簡単です クラス構造を記述し、 それが作成構築するよりも、 table文が、一つのこと 、を意識するということです ORMは、最善を尽くします 何ほとんどを把握します 効率的なSQLクエリは次のようになり、 時にはそれは、それが間違って取得します。 そして、あなたがしている場合は特に 大きなデータベースでの作業、 クエリことに気づくことができます それは、高速で実行されているはずです 実際に時間がかかっています。 そして、あなたはどのようにボンネットの下に見れば ORMは、SQLにそれを解釈しています それが何かをやっている可能性があります 本当にとんでもありません、 理由だけで、それは一種の あなたの意図が間違っ仕草。 そして、ここで、回がありました 私はそれを上書きしなければならなかった、とだけしました ただ、私自身のSQLクエリを実行 それは奇妙な方法で解析を実行していたので。 だから、そこにあるいくつかの だけの方法で、オーバーヘッド それはあなたがコンパイルされていること SQLへのダウン文。 それでは、スーパーですぐに見てみましょう データモデルの簡単な例 あなたが使用するかもしれません。 だから、これはPythonコードであるので、 あなたがしたいまず最初にからです ピーウィーインポート*。 だから、あなたが持っているフラスコとは異なり、 すべてのこれらの個々のモジュール、 あなたはフラスコをインポートすると、 テンプレートを作成し、いくつかの他 我々は後で見ること、ピーウィーから、 あなただけのすべてをインポートすることができ、 ので、それはかなり小さなライブラリです。 だから、あなたがしたいまず最初に、あります 実際にこのデータベース・オブジェクトを作成します。 だから、あなたが持っているデシベル=にSQLiteDatabase、 して、データベースの名前。 そして、これは実際になります データベースオブジェクトを作成します あなたはピーウィーと、と相互作用することができること。 そして、私たちは実際に持っています 私たちが作成するモデル。 だから、テーブルには、我々が作成します。 だから、ピーウィーの範囲内で、それぞれのクラスが持っています データベース内の独自のテーブル。 だから、すべてのクラス ベースモデルから継承し、 資本Mモデルです ピーウィーで定義されて何か。 だから、あなたのすべてのモデルはすべき 彼らの最高のスーパークラスとして継承し、 彼らが継承する必要があります モデルが、本当にクールです、 あなたが実際にあなたを持つことができるということです モデルは、互いから継承されます。 そして、多くの時間、あなたの データモデルは、必ずしもありません 素敵な継承階層を作るが、 彼らは時間が、それは本当にうれしいです、 あなたは、モデルを持っているので、 互いに固有。 そこで、我々は、このクラスを定義しました モデルを継承する「学生」、 それは3つのプロパティを有しています。 それはある、IDを持っています PrimaryKeyField、これ 提供だものです ピーウィーにより、名前はCharFieldですが、 グレードはIntegerFieldとあります。 だから、これはまたはであってもなくてもよいです どのようにCS50が実際にすべての店舗 学生の成績。 それはありませんが、これは私がそれを行うだろう方法です。 そして、それは内部に有しています このクラスは、この あなたが行うことができるものです Pythonは、ネストしたクラスを持つことができます。 そして、これは何かあります それはピーウィーによって必須です。 あなたが持っているので、このクラスのメタ、 データベースがあることを指定します オブジェクトと等しいです 我々は上記で作成しています。 そして、これはファイルは、この表が何であるかを言います 実際に含まれるだろう。 だから、これはあなたが持っているものです あなたのすべてのモデルの中にすることができません。 あなただけ指定する必要があります このメタクラス内 そのデータベースは、DBに等しいです。 私があるのであれば、私は通常、何をすべきか 異なるモデルの束、 私は1つのベースを持っているということです モデル、私は通常、その 単に「ベースモデル」と呼びます それはメタクラスがあり、 そして、それはDBに等しい、データベースを設定します。 そして、私のその後のモデルのすべて その基本クラスから継承します。 そして、私が心配する必要はありません メタクラスの設定について。 だから、これは実際に取得したとき SQL文にダウンコンパイル、 それがダウンして、この厄介なことのように見えます ここでは、「テーブル学籍整数を作成します。 " なんでも。 そして、私はそれが短いと思い、 右ここでこのSQLクエリ、 しかし、あなたはここで、このクラスを見れば あなたが起こっているのを正確に見ることができます。 あなたは、フィールドのどのような種類を見ることができます 彼らは呼ばれているものがあります、 そのため、私はと思います このPythonコードを見て より多くの、より読みやすいです このSQLクエリを記述しようとしています。 だから、実際に順番に データベースを使用し、 我々は、Pythonの中でそれに接続する必要があります。 だから、私は通常と呼ばれる関数を書きます 2つのことを行いinitialize_db。 それはデータベースに取り オブジェクトDBとそれ ちょうどオープンしており、それに接続します データベースへのセクションまで。 あなただけしかし実行している場合 ローカルマシン上のウェブサイト、 それは心配するスーパーたいしたものではありません 接続と切断について、 しかし、あなたが実行している場合 そのウェブサイト上で、あなた 必ずときに、ユーザー、ということにしたいです 彼らが閉じたとき、それに接続します あなたがそのようにウェブサイト、彼らが切断します 接続されている人々の束を持っていません データベースへのすべてを一度に。 そして、ときに データベースに接続し、 あなたは、db.create_tables呼び出したいです あなたが望むもののためにモデルを一覧表示 テーブルを作成します。 だからここに、私はちょうどしたいです この生徒のためにそれを作成します。 そして、何が重要か、にあります 安全=真のほとんどの時間を指定します。 だから何このステートメント 行います、それはということです 用のテーブルを作成します。 学生モデルが、唯一の そのテーブルにはしていない場合 すでに作成されて。 それはどのような安全な指定です。 だから、上書きされることはありません あなたの既存のテーブル、 それは新しいを作成します。 テーブルが存在しないものがある場合。 だから、あなただけ作成することができます 表には、一度SQLを使用して。 そして、そのデータベースが座っています 存在し、各時間に接続し、 それだけに通常うれしいです このcreate_tablesコールに入れ、 そのように、あなたがあなたを削除した場合 あなたのWeb​​を実行したデータベース アプリを再度、それを再作成します。 そこで、念ことを確認してください 真であることが指定されています、 またはあなたは自分のデータを検索します 毎回上書きさ取得。 そして、あなただけ呼び出すことができます 確立することinitialize_db 接続は、と作成します テーブル必要であれば。 だから、最も一般的なもの あなたがしたいということ、 または最も一般的なものの一つ、 実際に物事を挿入することです あなたのデータベースに。 だから、むしろ持つより 挿入を書き込みます のすべてとステートメント 値は、指定されました あなたが実際に呼び出すことができます 学生のクラスの機能。 それで、あなたはクラスを作成するとき それは、モデルから継承します これはメソッドを作成しています。 だから、あなたはクラスname.createを行います、 あなたはパラメータを指定 あなたに渡したいもの。 だから、私はいくつかの学生を追加する場合 私たちのCS50グレードブックの例と、 私は誰が持っている、デビッドに入れましょう 非常に良い成績、彼は95を持っています。 やっていないと私、 とてもよくCS50で、私は50を持っています。 だから、いいところ この作成関数が何をするのか、 それはインスタンスを返すということですか、 行、それはテーブル内に作成することを、 そのため、あなたはAのことを保存します 変数、後でそれに取り組みます。 あなたは、周りに変更することができます 私は例を紹介します。 私はなかったことに注意してください IDを指定する必要があり、 それなのでため PrimaryKeyField、それが自動的になります あなたがそれを指定しない場合、それをインクリメントします。 そして、実際には、あなたはおそらく これを指定しないでください、 あなたが誤っている場合があるため、 誰か他の人のIDを壊し。 そして、あなたがしたいです それはユニークだことを確認してください。 したがって、実際には、ほとんどの あなたがしたいの共通点、 おそらくアウトを選択しています あなた一度データベースの そこに多くの情報を持っています。 だから、あなたはすべてを取得したい場合は、 そうセレクト星の同等 学生ステートメントから、それ ちょうどstudent.selectだろう。 そして、それは、配列をあなたに戻って得られます その中の学生のすべてのオブジェクトと あなたが反復処理することをあなたがしたいです。 あなたはそれのうちのものを得ることができます。 そして、ほとんどの時間、あなたは ただ、選択したくありません、 あなたが実際に何かを指定します。 だから、あなたはチェーンできます 一緒にこれらの関数呼び出し、 どのようにチェーンのと同じよう 一緒にSQLのステートメント。 だから、)(student.selectを行うことができます。ここで、 この例では。 そして、次のことができます 条件を指定して、 普通のPythonを使用して 物事をチェックするブール値。 そこで、この場合には、あなたがしたいです あなたが選択しているものを制限、 student.gradeは、50に等しいです そして、student.nameは、エズラに等しいです。 そのためには、ちょうどそれの私を取得します。 そして実際に、1に気付きます 微妙な事はここにあります あなたが指定する場合、その および/またはおよびまたは/または、 Pythonで、あなたが通常使用します、 私は、単語 "と"実際に考えます しかし、ここであなたは、単一のアンパサンドを使用して、 これは通常、ビット単位の演算子であり、 しかし、この特別な場合には、 おちびさんはそれをしないだけの方法、 あなたは、単一の使用します 指定するアンパサンド」と。」 それは、何か 私は多くを混入し、 それはアップしません 実際にはそれだけ。 そして、あなたはすべてを持っていたら、 データベースのうち、学生、 あなたが行った後、あなたは、選択しています あなたの摩耗または何、 あなたは、foreachループを使用することができ、 ちょうどPythonで、通常のように、 イテレータの任意の並べ替えを持ちます または配列の任意の並べ替えを持ちます。 だから秒間、行うことができます student.selectで()。WHE (Student.grade <75)再ので、この意志 テーブル内の各学生を反復処理 そのグレードの75未満である、これは この場合には、まだ私だけです。 そして、あなたは内で何かを行うことができます そのループは、のように私にメールを送ります 実際に私を伝えます 私の問題セットで回します。 そこで、もう一つは、次のことができます やる、それは本当に簡単ですです テーブル内の行を更新します。 だから、ここに戻って覚えて、 あなたの私は挿入し、 私がいた値を取りました student.createによって返され、 私はエズラと呼ばれる名前に割り当てられています。 そして今、あなたが変更することができます そのインスタンス内の値、 ちょうどあなたのような希望 Pythonで通常のクラス。 だから、あなたが設定することができezra.grade = 95と それは、ローカルコピーが更新されます、 しかし、あなたが実際にしたい場合 データベースにその変更をコミットし、 あなたは、ezra.saveを呼び出す必要があります あなたは.SAVE法と呼ば インスタンス上。 そして今、私は正常に変更されました データベース内の自分のグレード。 だから、その後の私が巻き込まれるとしましょう データベース内の私のグレードを変更します。 教授マランはおそらく起こっています クラスから私を削除するために、 そのため、あなたは.deleteを呼び出すことができます ちょうどその事のインスタンスメソッド。 だから、あなたが行きたいと思った場合 ここに戻ってこのループに、 実際、代わりに すべての電子メールを送信します その学年以下であり、学生の 75よりも、あなたはそれらを削除したいです、 このループ内で、可能性 s.deleteインスタンスを呼び出します。 そして、あなたがしたい最後のこと、 あなたが接続を確立するときはいつでもあります、 あなたは、自分の仕事を完了し あなたは、db.close呼び出したいです DBは、そのデータベースであります 我々の前に持っていたオブジェクト。 そして、あなたはそれを確認します すべてが外に閉じます。 クール。 だから今、私は例のアプリケーションがあります。 私はあらかじめ用意されたすべての並べ替えをしました コー​​ディング任意のライブがあってないように ミスが、私たちは、ウォークスルーすることができます それあなたがフラスコを置く方法を見ます そして、一緒にピーウィー、 そして、シンプルなアプリを作ります。 私はCS50の暴言を呼び出し、それはです シンプルなブログプラットフォームの一種。 だから、最初に、私はそれを実行するだろうと それがどのように見えるかを示し、 し、我々は、コードに多くを見ることができます。 わかりましたので、ちょうどこれを実行してみましょう。 クール、私はこれを作ってあげます 少し小さいです。 それはちょうどので、非常にきれいではありません 私は、CSSの多くを行っていません、 それが何をするかそれが有しています ブログ記事のこのデータベース、 そして、それはすべてを通過 それら、それはそれらを表示します ページ上の最新のためです。 だからこれらはいくつかの記事があります 私は、データベースに保存されていたこと。 だから我々は新しいを作成する場合 投稿は、我々は、新しいポストを追加するために行くことができます 私たちはのタイトルを入力することができます ポストので、何かのように、CS50セミナー。 うわー、本当にセミナーを楽しみます。 クール。 その後、ポストを押すと、それはなります バックホームページにリダイレクト、 そして、あなたはそれを参照してくださいよ 最新の投稿が追加されました。 そして、我々はまだそこにすべてのものを持っています。 だから今、のは、すべてのステップスルーしましょう コー​​ドとは、これが実装されている方法を参照してください。 だから、私はしてみましょう最初のことを考えます 実際のモデルである、を見てみましょう。 多くの時間、時 あなたが何かを設計しています、 あなたが方法について最初に考えてほしいです あなたは、あなたのデータを表現しようとしています そしてその周りのものを設計し、 その結果、すべてが理にかなっています。 どのように私そして、それは実際にあります 私はこれを作っていたときに、それをやりました 私は、座って、考え 私はポストに何をしたいです。 それで、ここでは、同一の構造を有しています 私は以前に言及されたこと、 我々は、DB = Sqldatabase( 'posts.db')を行う場所。 実際には、あなたはおそらくしたくありません あなたの名前のデータベースでハードコードします。 それはおそらく、パラメータでなければなりません それは多分、どこかに保存されています 設定ファイルではなく、中 このような小さな例、 その中でハードコードしても大丈夫です。 だから今、私たちは、このPostクラスを持っています、 これはベースモデルから継承します。 そしてそれは、再び、持っています ID = PrimaryKeyField。 実際には、次のように指定しない場合は、 私は実際にこのを処分した場合には、 その後、我々はの世話をしますピーウィー 自動的にそのIDフィールドを作成し、 それが自動的になります それのPrimaryKey作る、これ ため、私は通常、本当に素敵だと思います、 それはあなたが持っていたいものですが、 私は、具体的にそれを置くのが好き、 ちょうどので、私はそれがそこにということを覚えておいてください。 しかし、あなたはそれを指定しない場合は、 それは自動的に存在します。 それでは、私は日付を持っています DateTimeField型であり、すべての これらの異なるフィールド、よろしければ ピーウィーのドキュメントを見て、 それはあなたに別のリストを与えるだろう あなたが使用できるフィールドのタイプ。 ほとんどの場合、それは類似です あなたはSQLで見ることになるものに。 だからCharFieldですが、そこにあります VarCharFields、テキストフ​​ィールド、 非常に長いためにどのあります ブログの記事のようなテキスト、 潜在的に、DateTimeFields、 DoubleFields、FloatFields、 そのようなすべてのもの。 そして、あなたは他の引数を渡すことができます それまで、私はここで指定しませんでした。 たとえば、あなたがしたくなかった、と言います 2つのポストが同じタイトルを持つことができ、 あなたのように指定することができ 真=ユニークなのようなもの、 それはちょうど余分なパラメータです それはそれをコンパイルすることを視野 SQLに、それが指定されます それは一意である必要があること。 また、のようなものを指定することができます NOT NULLと他のすべてのもの あなたは、通常、SQLで行います。 だから、これは非常に簡単です 日付を持つモデル。 DateTimeField型内、ここで注意してください、 私は、デフォルトが何であるかを指定しました。 私はあることを、それを指定しました datetime.datetime.now、 そのための方法の これが評価されます、 それは実際に評価します DateTime.Nowにするとき それは、データベースに挿入されます。 私は、私が持っているだろうと思います doubleにこれを確認、 しかし、あなたは、その後、このような何かをした場合 それは実際に、一度それを評価します そして、その後のDateTime 常に同じになります。 だから、あなたは何かをやっているだけの場合 日時と、ダブルチェック それはときに評価するということ 実際に挿入、あるいは取得します あなたが混同される可能性があります。 タイトルだけです そこCharFieldです、 あなたが渡すことができる複数の引数があります 正確にどのくらいの期間を指定で それになりたいが、ここでは、 それは本当に問題ではありませんでした。 テキストがあることを行っています 全投稿のテキスト、 それはなるだろう あなたがしたいという理由だけではTextField それはかなり長い文字列であることを可能にします。 その後、我々は、このメタを持っています サブクラスそれだけ 我々はデータベースをしたいことを指定します これは実際に開かれる場合 私たちはここにあるDBオブジェクトをすることができます。 そして、私たちが持っている最後のもの ここでは、これだけの機能であります 我々はするつもりだこと 私たちのメインのアプリから使用 に接続するためのデータベースを初期化します それは、その後、ポスト・テーブルを作成します。 さて、メインアプリ自体を見てみましょう。 だから、この1つはかなりあります ものよりも少し長いです 我々は前に見たこと、 うまくいけば、それほど悪くはありません。 だから、私はこれを拡張してみましょう。 はい。 だから、通知と私はインポートトップ 他のものの全体の束 私たちが持っていないフラスコから 本当に前に見ました。 そして、うまくいけば、我々は通過することができます これら一つ一つの各1 約もう少し話 それらは、例によってソート。 そこで、フラスコを持っています、 そして、render_template、 これは我々の前に見てきました、 このリクエストオブジェクト、 これは私たちがどのように見たときに出てきます 私は実際に見せていたフォーム 作品。 あなたがリダイレクトできた、リダイレクト バックの作成新しいポストから オリジナルのホームページに戻り、その後、 あなたのことができますものですURL、 どこに把握 ウェブサイトの特定のページがあります。 それでは、次の 私は事は、私のインポートです モデルのすべての情報 私たちは見ていたファイル。 そして、ええ。 だから、新しい何か他のものは来ます あなたが扱っているまで、 特にデータベース、 指定できるということです 前に呼び出される関数 取得すべてのリクエスト、および機能 これを使用して、すべての要求の後に呼び出さ 関数デコレータapp.before要求。 そして、これは実行されてしまいます どここの関数です。 これは、である必要はありません 要求の前に呼び出され、 通常、それは何か それを呼び出すことが賢明。 あなたはどのような機能を指定することができます あなたは、そこに呼ば取得したいです 私はこのinitialize_dbを指定しました 私たちはモデルに戻っていた機能 ファイルなので、すべての要求の前に、あなた データベースに接続します。 二つの異なるがあります。 方法は、あなたがこれを行うことができます。 あなたは@appを行うことができます。、私は それはafter_requestだと信じています。 そして、の間の差 after_requestとteardown_request、 after_requestのみ起こるということです リクエストが実際に有効であった場合。 だから、場合にのみ リクエストが成功しました、 何が間違っていたんであれば、 しかしteardown_request 成功した場合に起こります 要求、またはエラーの場合には そこで、通常は、あなたがしたいです teardown_requestを使用するには、 あなたは何をする必要がない限り、 特に何か違います、 エラーの場合には しかし、単にデータベースを閉じるため、 それが成功するかどうかそれが失敗した場合、 我々はあなたが切断しますか データベースから。 だからそれが、db.closeと呼ばれています DBオブジェクトに。 teardown_requestことに注意してください 例外になります。 実際にあったのであれば、あなたは確認することができます それが閉鎖されたエラー、 しかし、ここでは、うまくいけば、そこに エラーの全体の多くではありません、 私たちはただ一種のことを無視しています。 さて、それの残りの部分は、あまりにも悪いことではありません。 だから、私たちはホームページに行くとき、 我々はこのhome.htmlテンプレートのレンダリング それが開きます。 パスは、ポストであります 、どのような本に等しいです 私たちはこのポストを持っている、であることを覚えているん モデルは、私たちは、すべての記事を選択 そして、あなたが行うことができます別のもの、 あなたは、WHERE句を指定することができます 次のように指定することができます 注文し、私たちは取ります 記事のすべてのこと 次に、選択取得し、 我々はで注文して post.date.descending。 そして、それはときに、指定します 彼らは実際に出てきます、 最も最近のもの 非常に最初のものになります。 そして、我々はそれを渡すことに home.htmlテンプレート、 それでは、実際に開いてみましょう 本当に素早くそのテンプレート、 そしてそれは働いているかを見てみましょう。 そして、これは偉大なHTMLのではなく、 うまくいけば、我々は、Pythonに集中することができます。 だから新規追加へのリンクがあります ポストので、このルートを指定します 我々フラスコ内 右ここにある、定義されます。 これは、新しいポストルートです、 我々はここでそれをまで指定。 そして、そのためには、次に移動しますリンクです フラスコサーバ内のその経路に。 もっと面白いこと これは、ここでループのためのものです。 だから我々はこのことを指定します ポストパラメータします 渡されました render_template機能、 投稿の中ですべての投稿のための に渡されるオブジェクト。 私たちは、プリントアウトしたいです 記事のタイトル、H1で、 して、以下に、我々はプリントアウトしたいです 段落内のポストテキスト。 そしてここで、私たちは実際にすることができます Pythonの関数を呼び出し、 私たちは、ST-RF-時間をstrftimeのを呼び出すことができ、 あなたはフォーマット文字列で渡すことができます あなたがデータを印刷すること。 だから、それはあなたができることかなりいいですよ 実際にはこのPythonの関数を呼び出します ここで内から。 あなたは上の書式設定を行う必要はありません コントローラ側、本当にため、 日付をフォーマットすると、そのものです あなたは、ビュー内で対処したいです。 そして、これらのパーセントのすべて 物事が超重要ではありません。 あなたはドキュメントを見てみると Pythonでstrftime関数のために、 それはすべてのこれらを指定します 物事が、それはです どのように、私たちが探していたとき こちらのホームページで、 それは素敵でこれをフォーマットします 日付、それはAMまたはPMを指定し、 通常は、我々の場合 ここでこれを持っていませんでした、 あなたは、おそらくいくつかのゴミを取得します 非常に良い見ていない日。 そして、我々は指定します post.text、と私は可能性があり のカップルを入れています ラインはちょうど、ここに壊れます 各ポストの間にいくつかのスペースを入れます。 だから、私は最も重要だと思います この例では、事、 あなたはループのためにこれを使用することができるということです。 これはに類似しています 物事はあなたがPHPで行うことができます。 あなたは、反復処理することができます すべてがで渡されます、 そのため、代わりに行うために持っていることの コピー/貼り付け、コピー/すべてのHTMLを貼り付け、 あなただけ一旦それを記述する必要があり、 あなたは記事のすべてを反復処理することができます。 そして、これは何かあります あなたがしたいという共通 あなたは多くのデータを持っている場合、行うには、 ことは、データのすべてのためのものです、 あなたは同じようなことをしたいです。 そして、ちょうどそのときに、覚えています 明示的に何かを印刷します HTMLで、使用 ここでは二重の中括弧、 その後、指定したいとき 状態に関するいくつかの情報、 または約ループのために、あなた パーセントのブラケットを使用しています。 そこで、Pythonのに戻ります コー​​ドは、その結果は説明します 何が主に起こっています ルート、我々はそこに行きます、 それだけですべて表示されます ポストが、その後の質問 私たちは実際に入手できますかどのように、です データベースへの投稿、どの もう少し興味深いものです。 それで、あなたは新規をクリックしたときに 私たちはここで見た後、リンク、 それは、このフォームにリダイレクトされます。 そして、それはちょうど簡単な呼び出しです その後render_template機能、 HTMLフォーム内の​​新しいポストを渡します。 それでは、その見てみましょう。 したがって、この1は非常に簡単です。 これは、単純なHTMLフォームを有します 少しはお馴染みになります、 CS50ファイナンスのフォームに基づきます。 だから、私たちは、ここでアクションを指定します。 そして、ここで、あなたが作業している場合 PHPで、通常は、それを 以下のようなものになるだろう、 create.PHPが、ここでは 私たちは実際にルートを指定 フラスコサーバ内。 だから、このルートが対応 作成したルートへ 我々は、ここに持っていることをします 我々は、第二​​に入るでしょう。 だから、我々はそれを指定します それは、POSTメソッドです 私たちは、送りたいので、 このフォームデータ、および通常 フォームからデータを送信しているとき、 あなたはポストの要求を使用する場合があり、 ちょうどあなたが終わるません この大きな、扱いにくいURLに置き換えてください。 しかし、あなたはまた、GETリクエストを使用することができ、 そして、可変ルーティングとそれを渡します しかし、フォームのために、それはうれしいです ここにポスト要求に。 だから、その後、あなたのような HTMLやPHPで行うと、 あなたはこれらのテキストの入力を指定することができ、 そして、あなたはそれらの名前を指定することができ、 それが渡される名前です フラスコ内のリクエストオブジェクトに。 そして、我々が提出しています ポストを言うボタンを押します。 そしてここで、ポストの名前です。 ボタン、それはブログの記事だから、 しかしここで、投稿は、リクエストメソッドです。 だから、それらは同じ単語です しかし、実際には関係のありません。 うん Pythonのコードに戻って、 我々はcreateメソッドを呼び出したとき、 あなたができることをここに気づきます 実際にルート内で指定します リクエストメソッド あなたが受け入れるようにしたいことを、 ので、ここで、私は私の指定 POSTメソッドのみを受け入れるようにしたいです。 だから、私は実際にページを訪問しようとした場合 直接に、GET要求を使用しています、 それは、「メソッドが許可されていません。 "私に教えてくれます だから、あなたは、ソートのようなページがあります これは私だけだページを作成 本当にのための方法として使用して フォームが送信取得するには、 あなたはしないように指定することができます 人々はそこに行くことができるようにしたいです 直接GETリクエストを経由して、 または、あなたが望んでいなかった場合、 何らかの理由で、POSTリクエスト、 あなただけの、ここでGET指定することができます この例では、ただ ポスト要求が出て行きたいです。 だから、create_postが呼び出されたときに、時 我々は、POSTリクエストを経由していることを訪問します あなたは、特定に行くたびに ルート、この要求オブジェクトがあると、 私たちは、インポートする必要がありました 非常に上部にある要求、 しかし、この要求があります に渡されるオブジェクト、 あなたは、フォームデータにアクセスすることができ、 これは自動的に満たされてしまいます フォームからリクエストを送信するとき。 そして、私が何を考えて 、本当にクールです フォームオブジェクトは、渡さすること で、ちょうどPythonの辞書であります あなたはので、ここaccess--場合、含まれている、しましょう 私はただ、その隣にHTMLをプルアップ あなたはそれを持つことができます 参照として、はい、そう 私たちはここで指定する名前 異なるフィールドのため、 タイトルとテキスト、我々 その後、ちょうどここの上にそれらを使用します フォームデータのインデックスとして。 だから、超便利です。 それでは、私たちは、post.createを呼び出します 作成し、自動的に挿入されます データベースにこの新しいポストオブジェクト。 そして、私はこの関数を作成すると思います ここではどのように本当にクールな例です。 強力なフラスコであり、これと協力して、 あなたが何かをしていた場合のため PHPで、あなたがする必要があるかもしれません 検証の多くを行います、 あなたがしてしなければなりません データベース接続を確立し、 あなたがしてしなければなりません SQLクエリを実行し、 しかし、ここで私たちは、この素敵なを持っています post.create、これは私たちがちょうどそのことができます 情報を取得します リクエストオブジェクトの、 し、新しいにそれを渡します 我々が作成しているポスト。 そして、非常に最後の 私たちがやりたいこと、 リダイレクトすることです ホームへ戻るユーザー。 そして、私たちはこれを使用します フラスコは、機能をリダイレクトします。 そして、私たちは見ていない何かを 前、このURL機能がありました。 だから、機能のためのURLができます あなたが実際に名前を渡します Pythonコード内の関数の、 むしろ特定のルートより それはATのこと。 だから私は同じように簡単に持つことができ スラッシュするようにユーザーをリダイレクトし、 これは家に帰っそれを送るだろうが、 機能のURLを使用するといいです、 あなたが変更した場合のため 物事がある場所、 それでは、私は変更することとしましょう 代わりに/家にあると家庭、 これはまだ、その後の/ homeを返します、 実際に行くと検索しますので、 関数の名前、およびそれ そのため、URLをあなたに戻って得られます。 だから、ソートの上 あなたがしていることを前提 どこに物事を変更する可能性が高いです 関数の名前よりも、です。 あなたは本当にこれを使用することができます 機能のための素敵なURLです。 そして、もう一つの事は知っておくべき それは、少しトリッキーです あなたはあなただけのことができると思うことです URLにリダイレクトを呼び出し、 しかし、実際にはすべてのルートのは、持っています テキストとHTMLのいくつかの並べ替えを返すために、 だから、実際に持っています リダイレクトコールを返します。 そうしないと、あなたが何かを得るでしょう 無効な文字列を返すないことについて、 これらのすべてが返す必要があるため HTMLは、あなたが実際にレンダリングします。 だから、あなたがリダイレクトを呼び出すと、 それは、ページにリダイレクト それは実際にHTMLを返します あなたはそのリダイレクトを実行する必要があります。 ホームページに戻ります。 だから我々は、これらの2つの異なるビューがあります。 我々はホームビューを持っています。 それとも、私はテンプレートを言う必要がありますね。 我々は、これら2つのテンプレートを持っています、 ホームテンプレートいます 私達の記事のすべてを表示し、 その後、我々はこの広告の事を持っています、 あなたがポストをクリックすると、それは行きます フラスコ内の新しいルートに、 しかし、そのルートは必ずしもありません 対応するテンプレートを持っています。 あなたが見ることはありません 何が、あなたはまだすることができます この作品は持って行きます 舞台裏に。 そして、あなたがリダイレクトされます ホームページに戻ります。 そして間違いなく、それが動作するのは簡単です テンプレートにいくつかのよりよいCSSの これは多くのよりよい見えるように、 しかし、メイン・ロジックのすべて Pythonでもあります。 その一例についてのご質問? 私はたくさんのがあります知っています 異なるものは、そこに行きます 私たちが見ていなかったことがたくさん 前、何でものように。 うん。 聴衆1:あなたは何もする必要はあります データをスクラブする特殊 形から入ってきますか? 私は、「作成」先ほど言った気づきました エズラZIGMOND:うん、のように 実際に、それは本当に良い点です。 そこで問題があって、あなたを行います チェックして確認する必要があります データが有効であり、その スクラブの任意の並べ替えを行います それが有効であることを確認するために、 あなたがここに見ることができるようにあるため、 私はそれをやっていませんよ。 それでは、何が起こるか見てみましょう 私は空白のものを投稿します。 だから、それは実際にちょうど作ってあげます 空白のポストと日時を入力します。 だから実際には、あなたはおそらくだろう 以下のような何かをしたいです、 タイトルはに等しい場合多分指定 空の文字列は、これをしません。 タイトルがある場合は、それだけを行います 空の文字列に等しくありません。 だから、実際には自動的にしません その洗浄の世話をします あなたのために、あなたはまだそれを行う必要があります。 うん、良い質問。 聴衆2:それはスクラブありません 続編注入のため? あなたは知っていますか? エズラZIGMOND:うまくいけば、 おちびさんはそれを行います。 私はそれは確かにかなりだと思います 悪いライブラリは、それはそれをしなかった場合。 私は正確に知りません。 私が見ていると思います それが発生したことを問い合せます。 私は私が入力した場合、と思います ソートの見えたブログの記事 SQLインジェクション攻撃のように、 このような何か、この場合 パスワードフィールドか何かのようなものです、 あなたはこのような何かを行う可能性があります。 私はまだだろうと思い 文字通り投稿を取得、 私はおちびさんがやるんだと思います データのスクラビングのいくつかの並べ替え それは実際にそれを実行する前に。 聴衆1:テキストフ​​ィールドであることを プレーンテキストを取るように設計された、右? エズラZIGMOND:ええ、そうです。 うん。 だから私はすべてのことを考えて、これはあります 正しい動作は、それはそれを行います、 私はそれピーウィーを考えます うまくいけばやるん その端に保護のいくつかの並べ替え。 そして、あなたがしたい場合 ダブルチェック、それがあります クエリを生成する方法があります。 だからあなたがする必要はありません それを直接実行します。 私が取る必要があるだろう ドキュメントを見て、 しかし、あなたは実際に見ることができます それが生成されるSQL、 そのを見て、そして作ります それは物事をエスケープしていることを確認してください。 なぜあなたがかもしれないもう一つの理由 SQLを見てみたいです そのおちびさんは、次の場合ですが、出力しています 物事はゆっくりと本当に起こっているように見えます、 あなたが見て、それが何を見ることができます それは時々だから、実際に、やっ 誤って追加するのは簡単 あなたはそれを書くようにして、で、 あなたが誤ってそれを持つことができます 最初のデータベース全体を選択し、 して、いくつかの並べ替え操作を行います その上で、ときに本当にあなた サブセットを選択するためのもの。 だから、物事がされていない場合 かなり右に行きます、 それは要求を見てみるために良いことです それは実際に生成なってきました。 うん。 聴衆2:あなたが最初に起動すると、 あなたは5000としてポートに入れます。 エズラZIGMOND:うん。 聴衆2:おちびさんとのデフォルトは、 または変更できるものということですか? エズラZIGMOND:はい、そう ポートは、フラスコでデフォルトです。 あなたはせずに、それを実行した場合 何も指定して、 それが自動的にそれを行います。 私は私が持っているだろう、と考えています doubleにこれを確認、 しかし、あなたは、app.runであることを指定することができます 私はあなたのような何かを行うことができると思います、 ポート= 8080。 それでは、実際に素早く試していることを挙げてみましょう。 うん、だからあなただけ指定することができます ポート= 8080は、それは、そこにそれを実行します 私はあなたがそれを実行したい場合、これだと思います IDE上で、私は、これを試していません しかし、私はどうかと思います ポート8080でそれを実行し、 おそらくことができると思います サーバーにアクセスするには、 ちょうどあなたがウェブサイトのためだったような。 うん、それは簡単です もしあなたことを変更します 以下のようなポート転送の任意の並べ替えを持っています あなたがする必要があるもの。 その他の質問は? うん? 聴衆1:だから、私はあなたで見ました あなたが述べたように、モデル、 あなたが指定する必要があります 各オブジェクトのデータベース。 あなたが知って起こるのか、ありません それはあなたの場合、それは本当に簡単にします SQLiteのデータベースの多くを持っているあなた 一つのWebアプリケーションで使用します、 あなただけの束を指定できること モデル内の異なるもの? エズラZIGMOND:ええ、私を聞かせて 実際に素早くそれを開きます。 だから、あなたはあなたが持っているしたい場合は、言っています 別の何かの束、多分 いくつかのために、好きで、学生 その理由は、そのような何か? ええ、私はと思います まだあなたは、各モデル まだちょうど持っている必要があります それに割り当てられたデータベース、 しかし、あなたが持っているしたい場合 異なるモデルという 別のデータベース・オブジェクトが割り当てられています それに、あなたは間違いなくそれを行うことができます。 だから、私は新しいを作成した場合、 このようなもの、 そして今、これはその学生です 奇妙なブログ記事のように見え、 私がいることを指定することができます データベースは、ここでdb_2をに等しいです。 だから、私はそれがだと思います あなたがそれを行うことができます主な方法。 クール。 その他の質問は? だから、ほんの少しを終了します ビット、ここでいくつかのリソースがあり、 これらのスライドは、オンラインで掲載されます あなたが実際にこれらのリンクを得ることができます。 最高のリソースが実際にあります フラスコのドキュメント そして、自分自身をピーウィー。 彼らは本当によく書かれている、私は思います。 そのため、フラスコのウェブサイトはここにある、と 彼らは、クイックスタートチュートリアルを持っています 同様のウォークスルーします 物事私はウォークスルーものに、 しかし、あなたはレビューの任意の並べ替えをしたい場合 私が渡ったものの、 または、あなたは私が説明することを考えました 紛らわしい方法で何か、 彼らはそこに同じような例があるでしょう。 ピーウィーは、ドキュメントを持っており、 彼らは、クイックスタートチュートリアルを持っています それが主なパラメータを乗り越えます あなたが使用したいということ。 だから、物事は私が話題 ユニーク、およびデフォルト値を指定して、 その分野の異なる種類の あなたはそれらのすべてがあるだろう、使用することができます。 また、あなたが持っている場合 おちびさんについての質問、 あなたは、stackoverflowの上に投稿 実際にピーウィーを作った男 行くと、時々、それらに答えます。 あなたが質問がある場合は、うまくいけば 彼はそれに答えることができるでしょう、 彼は全体のことを書いたので。 私はそれがすべてだと思います 私がカバーしたかったです。 出てきてくれてありがとう。