続け--Flask、ジャンゴ - 違い

1.リファレンスディレクトリ構造ます。https://blog.csdn.net/yang9520/article/details/79740374   

  1. 中国の文書(http://docs.jinkan.org/docs/flask/

通常の状況下では、Djangoは非常に体系的かつ統一されました。フラスコのプロジェクトディレクトリ異なるスタイル、でも青写真を過ごします。

2.データベースの移行

フラスコは、サードパーティの拡張機能を使用しますが、Djangoは来て、これは非常に便利です。

3.モジュラー

フラスコは青写真です。Djangoは自動的に生成することができますpython manage.py startapp <app_name>し、辞書をINSTALLED_APPS設定Djangoプロジェクトのように見え登録します。

4.コマンドライン

な移行などDjangoの最初のコマンドラインより多くの機能、。しかし、フラスコのカスタムコマンドは非常に簡単です。
側面を開始し、フラスコを2、1を実行するmanage.pyスクリプトによってそこに助けられている、他のは、公式ドキュメントはこのことを示唆している背後に、バージョン1.02は、環境変数を追加し、フラスコの実行を実行するために、輸出の環境変数でありますFLASK_ENV。ワンクリックで、CMDをカスタマイズすることも可能であり、依存パッケージとして5をフラスコ。

@app.cli.command()
def hello():
    click.echo('Hello, xxx!') flask hello

5.同じの新しいモデルの側面を作成します。

彼らは、ORMモデルを継承しています。モデリング後のデータベースに追加するには、データベースの移行を行うことです。
フラスコは、例えばmodels.charFieldのために、あなたはDjangoが明らかにあなたが使用したい一方で、model.Columnを作成するフィールドの種類に渡されます。

6.リバース取得URL

urlpatterns = [ path('', views.post_list, name='post_list') ]

名前、同等のエンドポイントフラスコ。名前は、URLを取得する(名前を)逆、逆を意味しています。

// 在模板中
<a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1> //Django {% url_for('") %} // Flask

7.ルート

、views.py urls.py:Djangoのビュー機能とルーティングは別個の書面です。フラスコを一緒に表示する機能、でviews.pyで書かれたURL(app.route形態デコレータ)を書き込むています。
ジャンゴのでMTVモードです。実際には、MVCパターンと同じ。それは、実質的にviews.pyとurls.py.にコントローラであり、

URLとビュー機能フラスココマンドとの間のマッピングを確認することができフラスコルートを使用して行。コードで使用App.url_mapを表示することができます。

8.ミドルウェア

セット内のDjangoのsettings.pyは、
フラスコミドルウェアインスタンスを初期化し、その後、アプリ(フラスコ)インスタンスを通過します。

9.リクエストオブジェクト

ジャンゴ、各ビュー機能またはCBVは、リクエストパラメータで記述する必要があります。ビュー機能のフラスコがあるため、ではありません

from flask import request

# 这个request是对每个请求独立的,就像g变量。值得研究底层原理(Flask通过本地线程( thread local) 技术将请求对象在特定
的线程和请求中全局可访问)

前記HTTPリクエストを制限する方法

フラスコ

@app.route('/hello', methods=['GET', 'POST'])
def hello(): return '<h1>Hello, Flask!</h1>'

ジャンゴ

from django.views.decorators.http import require_http_methods
@require_http_methods(['GET','POST'])
def login(request): pass

11.フック関数

フラスコに加え、フックデコレータ

@app.before_request
def do_something(): pass # 这里的代码会在每个请求处理前执行

ミドルウェアによるジャンゴ、

フレーム間差分

  • Djangoは、大きな特徴と、フラスコ、開発者は、開発する前にアプリケーションのためのインフラストラクチャ上で多くの時間を費やす必要はありませんできるように、ワンストップソリューションの基本構成のみDjangoのアイデアが含まれています。そこDjangoのテンプレート、フォーム、ルーティング、認証、データベース管理などの基本的な組み込み機能。これとは対照的に、フラスコちょうどカーネル、デフォルトでは2つの外部ライブラリに依存:Jinja2のテンプレートエンジンとWERKZEUG WSGIツールセットは、他の多くの機能が組み込まれた形の使用を拡張するために行われています。

  • 前に、アプリケーションを構築する開発者はフラスコでより多くの柔軟性を与えるであろう時間のコンポーネントを選択するよりも柔軟フラスコDjangoは、いくつかのシナリオでは、標準のORM(オブジェクトリレーショナルマッピングオブジェクト関連マッピング)に適していないかもしれまたは異なるテンプレートやワークフローシステムと対話する必要があります。

  • Djangoのリリース後、この段階でDjangoは2005年にリリースされさまざまなニーズを満たすためのプラグインや拡張が多数のフラスコがある、フラスコは、2010年半ばに設立されました。

スタートガイド

コードHello Worldアプリケーションフラスコは、最も簡単な、単にコードの7行のPythonコードファイルを使用することは十分です。

コードをコピー
フラスコのインポートフラスコから 
アプリ=フラスコ(__ name__) 

@ app.route( "/")
)(こんにちはDEF: 
    "Hello Worldのを!" を返します 

__name__ == "__main__" の場合:
    app.run()
コードをコピー

 

上記のコードは、すでに簡単なWebアプリケーションでビュー、すぐにスタートラインとコードを始めることができ、ほとんどのPythonのWeb開発経験の上でHello Worldアプリケーションポイントの特性から。

プロジェクトの違い

Djangoのプロジェクトを作成し、アプリケーションを作成します

ジャンゴ-adminのstartprojectのhello_django 
ジャンゴ管理者startappのハウディ

 

そのディレクトリ構造: 

デフォルトでは唯一の空のモデルとテンプレートファイルを含む作成した後、Djangoのプロジェクトやアプリケーション、その後、フラスコは、プロジェクトを作成し、ディレクトリがないファイル、我々は、手動で作成する必要が別個の構成要素としてDjangoのようではない、との必要性コンポーネントサブアイテム離れて、フラスコを青写真を持っています。user.py年間でいるので、ユーザに関連する機能たとえば、あなたは、ecommerce.py年の売上高関連の機能をお使いのアプリケーションを構築することができます。

独立したアプリケーション、およびモデルといくつかのビューの単一のアプリケーションを含むフラスコされなければならないプログラムに投影するジャンゴ。もちろん、我々はまた、フラスコ内のようなDjangoプロジェクト構造をコピーすることができます。

原紙

Djangoはあなたが精通しているテンプレート、我々は簡単な例を与えます

コードをコピー
<! -  view.html  - >
<DIV CLASS = "トップバー行">
  <DIV CLASS = "COL-MD-10">
  <! - 多くのトップバーの事はここに行きます - >
  </ div>
  {%であれば、ユーザ%}
  <DIV CLASS = "COL-MD-2にwhoami">
    あなたは{{}} user.fullnameとしてログインしています
  </ div>
  {%ENDIF%}
</ div>
{在庫%でウィジェットの%}
    <LI> <a href="/widget/{{ widget.slug }}/"> {{widget.displayname}} </a>の</ LI>
{%ENDFOR%}
コードをコピー

 

フラスコも不自由Jinja2の中Djangoテンプレートでは、実際には、上記の例の全てをジャンゴに触発され、デフォルトのテンプレートを使用し、Jinja2のと呼ばれる開発しました。

テンプレートの単純な比較

<! - ジャンゴ - >
<DIV CLASS = "カテゴリ">カテゴリー:{{post.categories |参加: ""}} </ div>

<! - 神社 - >
<DIV CLASS = "カテゴリ">カテゴリー:{{post.categories |加入( "")}} </ div>

 

神社は、パラメータをカプセル化するために括弧書きで、それを見て道のPython関数を呼び出すために好きなので神社のテンプレート言語では、あなたは、フィルタに渡される引数の任意の数を置くことができます。Djangoの唯一のパラメータを渡すように、コロンで区切られた名前、およびフィルタパラメータを使用。

  • 神社テンプレートのフラスコのため、他の-ENDFOR
コードをコピー
{在庫%で項目の%}
    <DIV CLASS = "表示項目"> {{item.render()}} </ div>
{%他%}
    <divのクラスには、=「ディスプレイ警告します」>
    <H3>商品</ H3>が見つかりません
    <P>多分、別の検索を試行しますか?</ P>
    </ div>
{%ENDFOR%}
コードをコピー

 

  • ジャンゴ模版のための空-ENDFOR
コードをコピー
{在庫%で項目の%}
    <DIV CLASS = "表示項目"> {{item.render}} </ div>
{% 空の %}
    <divのクラスには、=「ディスプレイ警告します」>
    <H3>商品</ H3>が見つかりません
    <P>多分、別の検索を試行しますか?</ P>
    </ div>
{%ENDFOR%}
コードをコピー

 

構文における上記の違いに加え、フラスコを多くのユニークなコンテキスト変数(なurl_for、get_flashed_messages()、等)を提供します

-------------------------------------------------- --------------------------------

フレームワークフラスコの主な機能は、プロファイル、および強い膨張軽量であり、コアは、テンプレートエンジンはJinja2のに使用されるWERKZEUG(ルーティングモジュール)です。

フラスコは、コンバータの6種類を建て:

「パス」「文字列」「任意の」「のint」「フロート」「」のuuid

違いJosnとxml:まず、彼らはデータを交換するために使用されている、いくつかは、より軽量josn続きます

 

2つのコンテキスト、リクエストコンテキスト、およびアプリケーション・コンテキストがありフラスコ。

コンテキスト:コンテナの同等は、彼はいくつかの情報プロセスフラスコプログラムの実行を救いました。

 

 

コンテキスト要求(要求コンテキスト)

リクエストとセッションコンテキスト・オブジェクト要求が属しています。

リクエスト:httpリクエストに対するHTTPリクエストの内容をカプセル化します。例:取得したユーザ= request.args.get(「ユーザ」)は、GETリクエストのパラメータです。

(口語:主にクライアントによって送信されたパラメータのいくつかを得るために使用される要求)

 

セッション:ユーザー情報のために、セッション・レコードからの情報を要求します。例:セッション[「名前」] = user.id、ユーザ情報が記録されてもよいです。また、ユーザ情報session.get(「名前」)を取得することができます。

(口語:セッションは、ユーザーのセッション情報の一部を実装するためのものです)

 

 

アプリケーション・コンテキスト(アプリケーション・コンテキスト)

CURRENT_APP Gは、すべてのアプリケーション・コンテキスト・オブジェクトです。

CURRENT_APPは:プログラムが現在のプログラムファイルのインスタンスを実行していることを示しています。私たちは、current_app.nameにより、現在のアプリケーションインスタンスの名前をプリントアウトすることができます。

(口語:現在実行中のインスタンスの代わりにCURRENT_APPは、限り、プログラムは一時停止せずに終了したとして、彼はいつもそれが私たちは、プロジェクトのログを記録することができますが存在します)

G:一時的に、変数をリセットする各要求を、オブジェクトを格納するための要求を処理します。たとえば:我々はいくつかの一時的なユーザ情報要求を取得することができます。

(口語:グラムとセッションオブジェクトとより多くの我々は、要求の破壊後、要求プロセスを作成するのに役立ち、などの要求は、一時的な記憶の役割を果たしています)

  • あなたはフラスコ=アプリケーション(_呼び出すと名_のプログラムアプリケーションオブジェクトのアプリケーションを作成するには時間が)。
  • HTTP要求の要求が発生するたびに、WSGIサーバはFlask.call()を呼び出し、要求オブジェクトは、次いで、フラスコ内に作成されます。
  • リクエストとgを超えるアプリのライフサイクル、アプリの生存期間、多くのHTTP要求が発生するので、複数の要求とgが存在します。
  • 最終パスビュー機能、応答オブジェクトリターンを生成することによって、リダイレクト、またはrender_template、クライアントに返されます。

違い:要求コンテキスト:データクライアントとサーバとの対話を保存します。アプリケーションコンテキスト:フラスコプログラムが実行されている時には、そのようなので、上のファイル名、データベース接続、ユーザー情報として、いくつかの設定情報を保存します。

(コンテキスト寿命への応用が要求コンテキストのライフサイクルよりも長いです)

 

 

リクエストフック

クライアントとサーバーの相互作用の過程では、いくつかの準備作業や最後の仕上げは、次のような、対処する必要があります:データベース接続を確立するための要求の開始時に、リクエストの終了時に、インタラクティブ形式でデータを指定します。重複したコード機能を回避するために、すべてのビュー機能を与えるために、フラスコは、機能的な設備、その要求のフックを提供します。

フック要求は、4つの要求を次のデコレータフラスコ支持フックの形で実装されています。

before_first_request:最初のリクエストを処理する前に実行します。

before_request:各要求の前に実行します。

after_request:なし未処理の例外が、スローされていない各要求の後に実行されるがある場合。

teardown_request:各要求を実行するようにした後、未処理の例外がスローされていてもして。

おすすめ

転載: www.cnblogs.com/klb561/p/11298404.html