フラスコフレームワークのルーティングと青写真

ルーティング

@app.route("/itcast")
def view_func():
    return "hello world"

1ルーティング情報を照会する

  • コマンドライン
flask routes
Endpoint  Methods  Rule
--------  -------  -----------------------
index     GET      /
static    GET      /static/

ここに画像の説明を挿入
Flaskは、デフォルトで静的ファイルにアクセスするためのルーティングを提供します

  • プログラムに参加する

Flaskアプリケーション全体のルーティングマッピング情報は、アプリケーションのurl_map属性に格納されており、この属性を読み取ることでルーティング情報を取得できます。

print(app.url_map)

ここに画像の説明を挿入

プログラム内のルーティング情報をトラバースする場合は、次の方法を使用できます。

for rule in app.url_map.iter_rules():
    print('name={} path={}'.format(rule.endpoint, rule.rule))

要求する

アクセス/アドレスを介して、アプリケーション内のすべてのルーティング情報をjson形式で返します

成し遂げる

@app.route('/')
def route_map():
    """
    主视图,返回所有视图网址
    """
    rules_iterator = app.url_map.iter_rules()
    return json.dumps({
    
    rule.endpoint: rule.rule for rule in rules_iterator})

ここに画像の説明を挿入

2リクエスト方法を指定します

Flaskでは、ルーティングのデフォルトのリクエスト方法は次のように定義されています。

  • 取得する
  • オプション(含まれています) ->簡略化されたGetリクエスト、ユーザーはサーバーインターフェイス情報を尋ねます
  • HEAD(含まれています) ->簡略化されたGetリクエスト、getリクエストによって処理されたレスポンスヘッダーのみが返され、レスポンスの本文は返されません

同じリクエストの場合、getを使用すると、headを使用してすべての情報が返され、ステータスコードと応答ヘッダーのみが含まれます。

methodsパラメータを使用して、インターフェイスのリクエストメソッドを自分で指定します

methods属性は、ルートのリクエストメソッドをオーバーライドして変更します。以下の最初のルートはpostのみをサポートし、2番目のルートはgetとpostのみをサポートします。

@app.route("/itcast1", methods=["POST"])
def view_func_1():
    return "hello world 1"

@app.route("/itcast2", methods=["GET", "POST"])
def view_func_2():
    return "hello world 2"

設計図

要求する

Flaskアプリケーションプロジェクトでは、ビジネスビューが多すぎる場合、特定の方法で分割されたビジネスユニットを個別に維持し、各ユニットで使用されるビュー、静的ファイル、およびテンプレートファイルを個別に分離できますか?

たとえば、ビジネスの観点から、アプリケーション全体をユーザーモジュールユニット、コモディティモジュールユニット、注文モジュールユニットに分割できます。これらの異なるユニットを個別に開発し、最終的にプロジェクトアプリケーションに統合するにはどうすればよいですか。

この要件はDjangoでどのように達成されますか?

設計図

Djangoはブループリントと呼ばれ、flaskはサブアプリケーションと呼ばれます。
ブループリントには、このサブアプリケーションで使用されるリソースをできるだけ含める必要があります
。Flaskでは、ブループリントを使用してモジュールを整理および管理します。

ブループリントは、実際には、一連のビューメソッドを格納するコンテナオブジェクトとして理解できます。これには、次の特徴があります。

  • アプリケーションは複数のブループリントを持つことができます
  • ブループリントは、「/ user」、「/ goods」などの未使用のURLに登録できます。
  • ブループリントは、独自のテンプレート、静的ファイル、またはその他の一般的な操作方法のみを持つことができ、アプリケーションのビューと機能を実装する必要はありません。
  • アプリケーションが初期化されると、ブループリント
    **を登録する必要がありますが、ブループリントは完全なアプリケーションではなく、アプリケーションから独立して実行することはできませんが、特定のアプリケーションに登録する必要があります。** Djangoのように、独立して実行することはできません。特定のプロジェクトに登録する必要があります

使い方

ブループリントの使用は、3つのステップに分けることができます

  1. ブループリントオブジェクトを作成するには、
    最初のパラメーターはブループリントの名前であり、__ name__はブループリント
    の場所を決定するために使用されます
    ここに画像の説明を挿入
 user_bp=Blueprint('user',__name__)
  1. このブループリントオブジェクトを操作し、ルートを登録し、静的フォルダーを指定し、テンプレートフィルターを登録します
 @user_bp.route('/')
 def user_profile():
     return 'user_profile'
  1. ブループリントオブジェクトをアプリケーションオブジェクトに登録します
 app.register_blueprint(user_bp)

ここに画像の説明を挿入
ここに画像の説明を挿入
url_prefixは、このルートが一致したときにプレフィックスを追加するために使用されます
ここに画像の説明を挿入

単一ファイルの青写真

ブループリントオブジェクトを作成し、ビューを1つのファイルに定義できます。

カタログ(パッケージ)の青写真

ビューは、単一のファイルまたは複数のファイルに配置できます

複数のファイルを含めることを意図したブループリントの場合、通常、ブループリントオブジェクトの作成はPythonパッケージの__init__.pyファイルに配置されます

--------- project # 工程目录
  |------ main.py # 启动文件
  |------ user  #用户蓝图
  |  |--- __init__.py  # 此处创建蓝图对象
  |  |--- passport.py  
  |  |--- profile.py
  |  |--- ...
  |
  |------ goods # 商品蓝图
  |  |--- __init__.py
  |  |--- ...
  |...

ここに画像の説明を挿入
ここに画像の説明を挿入
ブループリントを登録します。
ここに画像の説明を挿入
次の文を追加し、ビューのコンテンツをロードするように注意して
ここに画像の説明を挿入
くださいこの文は最後に配置する必要があります。そうしないと、循環参照が発生します。

拡張使用

1ブループリントのURLプレフィックスを指定します

アプリにブループリントを登録url_prefixするときに指定するパラメーターを使用する

app.register_blueprint(user_bp, url_prefix='/user')
app.register_blueprint(goods_bp, url_prefix='/goods')

ブループリント内の2つの静的ファイル

アプリケーションオブジェクトとは異なり、ブループリントオブジェクトの作成時に、静的ディレクトリのルートはデフォルトで登録されません。作成時にstatic_folderパラメーターを指定する必要があります

次の例では、ブループリントが配置されているディレクトリのstatic_adminディレクトリを静的ディレクトリとして設定します。

admin = Blueprint("admin",__name__,static_folder='static_admin')
app.register_blueprint(admin,url_prefix='/admin')

これで、/admin/static_admin/<filename>アクセスstatic_adminディレクトリ内の静的ファイルを使用できます

static_url_pathアクセスパスを変更することもできます

admin = Blueprint("admin",__name__,static_folder='static_admin',static_url_path='/lib')
app.register_blueprint(admin,url_prefix='/admin')

3ブループリント内部テンプレートカタログ

ブループリントオブジェクトのデフォルトのテンプレートディレクトリは、システムテンプレートディレクトリです。blueprintオブジェクトを作成するときに、template_folderキーワードパラメータを使用してテンプレートディレクトリを設定できます。

admin = Blueprint('admin',__name__,template_folder='my_templates')

ノート

  1. Djangoでのこのアクセスにより、すべてのルーティング情報が取得されます
    ここに画像の説明を挿入

  2. for i in
    iterable object反復可能オブジェクトの位置は、計算によって取得されます。頭の中でどのオブジェクトをトラバースするかを知っておくとよいでしょう。

  3. クロスドメインアクセスの問題を解決するにはどうすればよいですか?Django-corsはオプションの処理要求を提供します。ミドルウェアでは、オプション要求
    ここに画像の説明を挿入
    オプションはビジネスロジックを含まず、インターフェイス情報のみを要求します。許可される要求のソース
    ここに画像の説明を挿入
    ここに画像の説明を挿入
    処理にはcorsソリューションを使用するだけで済みます。考え方は同じです。

  4. Djangoでアプリを作成する目的は、再利用することです。このようにして、各アプリをDjangoから分離できます。たとえば、ユーザーモジュールを他のウェブサイトで直接使用したり、アプリを再利用して拡張したりできます。

  5. ブループリントの3つのステップに注意してください。1。ブループリントを作成します。2。ブループリントルートを登録します。3。ブループリントを登録します。

  6. ここに画像の説明を挿入

  7. ここに画像の説明を挿入

  8. ここに画像の説明を挿入

  9. ここに画像の説明を挿入
    10. pep8に従って、パッケージをガイドし、ガイドモジュールを可能な限り上に置きます。

  10. DjangoのDEBUGは静的ファイルをサポートしています。バックエンドのエラーはフロントエンドページに直接表示されます。コードを変更すると、開発サーバーが自動的に再起動します。Flaskのデバッグは静的ファイルをサポートしていませんが、後者の2つを
    ここに画像の説明を挿入
    実行することをサポートしています。デバッグモードの場合デバッグモードでは、サーバーエラーは詳細なエラー情報を表示しません

おすすめ

転載: blog.csdn.net/weixin_43297727/article/details/115249142