[音楽再生]
エズラ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の上に投稿 実際にピーウィーを作った男
行くと、時々、それらに答えます。
あなたが質問がある場合は、うまくいけば 彼はそれに答えることができるでしょう、
彼は全体のことを書いたので。
私はそれがすべてだと思います 私がカバーしたかったです。
出てきてくれてありがとう。