Quickstarters
Feature Overview
How to Build a Backend for Flask?
37 分
はじめに このチュートリアルでは、 flaskのバックエンドを構築する方法 を学びます。 flaskは軽量の バックエンドフレームワーク で、httpリクエストを簡単に処理し、開発中は デバッグモード で効率的に動作します。 私たちは、データベース管理、cloud code functions、restおよびgraphql api、ユーザー認証、リアルタイムクエリ(ライブクエリ)などの重要なback4app機能を統合して、あなたの flaskアプリケーション のための安全でスケーラブル、かつ堅牢なバックエンドを作成する方法を説明します。 また、back4appの迅速なセットアップと直感的な環境が、サーバーやデータベースを手動で構成するのに比べて、時間と労力を大幅に削減できることを確認できます。 flaskをback4appのparseサーバーに接続するためにpythonコードを使用します。その過程で、高度なセキュリティ機能、cloud jobsによるタスクのスケジューリング、外部統合のためのwebhookの設定など、主要な機能を実践的に体験できます。 このチュートリアルの終わりまでには、この基本的なセットアップを本番環境に適したアプリケーションに拡張する準備が整い、必要に応じてカスタムロジックやサードパーティapiを簡単に組み込むことができるようになります。 前提条件 このチュートリアルを完了するには、次のものが必要です back4appアカウントと新しいback4appプロジェクト back4appの始め方 https //www back4app com/docs/get started/new parse app アカウントを持っていない場合は、無料で作成できます。上記のガイドに従ってプロジェクトを準備してください。 基本的なflask開発環境 flaskは pip install flask を使用してインストールできます。マシンにpython 3 7以上がインストールされていることを確認してください。 pip install parse このpythonパッケージを使用すると、flaskアプリがback4appのparseサーバーと対話できます。 pythonとflaskの概念に対する理解 flask公式ドキュメント https //flask palletsprojects com/en/2 2 x/ flaskが初めての場合は、公式ドキュメントや初心者向けのチュートリアルを確認してから始めてください。 始める前に、これらの前提条件がすべて整っていることを確認してください。back4appプロジェクトを設定し、ローカルflask環境を準備しておくと、より簡単に進めることができます。 ステップ1 – back4appで新しいプロジェクトを作成し、接続する 新しいプロジェクトを作成する back4appでflaskバックエンドを構築する最初のステップは、新しいプロジェクトを作成することです。まだ作成していない場合は、次の手順に従ってください back4appアカウントにログインする back4appダッシュボードで「新しいアプリ」ボタンをクリックする アプリに名前を付ける (例:「flask backend tutorial」)。 プロジェクトが作成されると、back4appダッシュボードにリスト表示されます。このプロジェクトは、すべてのバックエンド設定の基盤となります。 flaskにparse sdkを接続する back4appは、データを管理し、リアルタイム機能を提供し、ユーザー認証を処理するためにparseプラットフォームに依存しています。 flaskアプリケーションをback4appに接続するには、 parse pythonパッケージをインストールし、back4appダッシュボードからの資格情報で初期化する必要があります。 parseキーを取得する back4appダッシュボードで、アプリの「アプリ設定」または「セキュリティとキー」セクションに移動して、 アプリケーションid と クライアントキー (必要に応じて rest apiキー )を見つけます。また、 parseサーバーurl (通常は https //parseapi back4app com の形式)も見つけることができます。 parse python sdkをインストールする には、flask環境で次のコマンドを実行します pip install parse flaskアプリケーションでparseを初期化する ファイル(例: parse config py )を app と呼ばれるディレクトリに作成するか、バックエンドモジュールを保存している場所に作成します parse config py import parse \# replace the placeholders with your back4app credentials parse application id = "your application id" parse client key = "your client key" parse server url = "https //parseapi back4app com" 次に、メインのflaskアプリファイル(例: app py )で、parse設定とともに import flask app flask モジュールをインポートできます from flask import flask, request, jsonify import parse config # this ensures parse is already set up app = flask( name ) @app route('/') def index() return "hello, flask + back4app!" if name == ' main ' app run(debug=true) # the debug mode helps in local development server このステップを完了することで、flaskフロントエンドルートとback4appバックエンドの間に安全な接続が確立されました。すべてのリクエストとデータトランザクションは、parse pythonコードを通じて安全にルーティングされ、手動のrestまたはgraphql呼び出しの複雑さが軽減されます(必要に応じてそれらを使用することもできます)。 ステップ2 – データベースの設定 データモデルの作成 始める前に、データベースの設定について話しましょう。back4appダッシュボードでデータスキーマを設計するか、parseに即座に作成させることができます。たとえば、「todo」という名前のクラスを作成し、 title や iscompleted のようなフィールドを追加することができます。 back4appダッシュボードの「データベース」セクションに移動します。 新しいクラスを作成します。 (例:「todo」)およびタイトル(string)やiscompleted(boolean)などの関連列を追加します。 back4appは、次のようなさまざまなデータ型をサポートしています string , number , boolean , object , date , file , pointer , array , relation , geopoint , そして polygon 各フィールドに適切な型を選択できます。 aiエージェントを使用してデータモデルを作成する 自動化されたアプローチを好む場合は、back4appのaiエージェントを使用することもできます アプリダッシュボードから aiエージェント を開きます。 データモデルを簡単な言葉で説明します (例 “back4appでタイトルとiscompletedフィールドを持つtodoクラスを作成します。”) aiエージェントにスキーマを作成させます 。 sdkを使用してデータを読み書きする flaskでは、次のように parse をインポートすることでデータを作成および取得できます parse config py の初期化 from flask import flask, request, jsonify import parse import parse config app = flask( name ) @app route('/create todo', methods=\['post']) def create todo() data = request get json() # import json to parse the payload title = data get('title') is completed = data get('iscompleted', false) todo = parse object factory('todo') todo item = todo() todo item title = title todo item iscompleted = is completed try saved todo = todo item save() return jsonify({"success" true, "objectid" saved todo objectid}), 200 except exception as e return jsonify({"error" str(e)}), 400 @app route('/fetch todos', methods=\['get']) def fetch todos() todo = parse object factory('todo') query = todo query try todos = query find() \# convert to json compatible response results = \[{"objectid" t objectid, "title" t title, "iscompleted" t iscompleted} for t in todos] return jsonify(results), 200 except exception as e return jsonify({"error" str(e)}), 400 if name == ' main ' app run(debug=true) このflaskアプリファイル httpリクエストを処理します あなたのback4appデータベースでtodoアイテムを作成し、読み取ります。 rest apiを使用したデータの読み書き 直接rest呼び出しを好む場合は、 curl を コマンドライン からテストできます curl x post \\ h "x parse application id your application id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"title" "buy groceries", "iscompleted" false}' \\ https //parseapi back4app com/classes/todo graphql apiを使用したデータの読み書き 同様に、back4appはgraphqlエンドポイントを提供します。例えば mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } ライブクエリの使用(オプション) 必要な場合は リアルタイム更新 , back4appは ライブクエリ を提供します。flaskのシナリオでは、通常、back4appのライブクエリサーバーへのwebsocket接続を維持できる別のクライアントサイドまたはサーバーサイドのサブスクリプションライブラリを使用します。 ライブクエリを有効にする には、アプリの サーバー設定 の下でback4appダッシュボードを使用します。 parse livequeryクライアントを使用する には、 wss\ //your subdomain here b4a io に接続し、作成/更新/削除イベントをリッスンします。 ステップ3 – aclとclpによるセキュリティの適用 簡単な概要 back4appは アクセス制御リスト(acl) と クラスレベルの権限(clp) を提供してデータを保護します。aclは個々のオブジェクトに適用され、clpはクラス全体に適用されます。これにより、ユーザー、役割、または一般公開に対して読み取り/書き込み操作を制限または許可できます。 クラスレベルの権限の設定 back4appダッシュボードに移動 , アプリを選択し、 データベース セクションを開きます。 クラスを選択 (例:「todo」)。 クラスレベルの権限 タブを開きます。 「認証が必要」や「アクセス不可」などのデフォルトを設定します。 コードでのaclの設定 pythonコードでaclを適用できます @app route('/create private todo', methods=\['post']) def create private todo() data = request get json() user id = data get('userid') title = data get('title') \# assume you have a pointer to the user or a way to get user from id parseuser = parse user user query = parseuser query user obj = user query get(user id) todo = parse object factory('todo') todo item = todo() todo item title = title acl = parse acl() acl setreadaccess(user obj, true) acl setwriteaccess(user obj, true) acl setpublicreadaccess(false) acl setpublicwriteaccess(false) todo item acl = acl saved todo = todo item save() return jsonify({"success" true, "objectid" saved todo objectid}), 200 ステップ4 – クラウドコード関数の作成 クラウドコードの理由 クラウドコードは、 pythonコード (他のシナリオではjavascript)をサーバーサイドで実行するのに最適です。自分のインフラをホストする必要がありません。データの検証、複雑な計算の実行、またはparseサーバーから直接外部サービスとの統合などのタスクを実行できます。 例の関数 back4appのデフォルトのcloud code環境はnode jsを使用しているため、cloud codeはjavascriptで記述します。ただし、flaskアプリからこれらのサーバーサイドスクリプトをトリガーすることはできます。たとえば、node jsのcloud functionは次のようになります main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); デプロイメント cloud codeをデプロイするには、 back4app cli https //www back4app com/docs/local development/parse cli を使用します \# step 1 install the cli curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash \# step 2 configure your account key b4a configure accountkey \# step 3 deploy your code b4a deploy また、jsコードを cloud code > functions に貼り付けて「デプロイ」をクリックすることで、back4appダッシュボードからデプロイすることもできます。 関数の呼び出し flaskでは、restを使用してそのクラウド関数を呼び出すことができます import requests @app route('/text length', methods=\['post']) def get text length() data = request get json() text = data get('text') url = "https //parseapi back4app com/functions/calculatetextlength" headers = { "x parse application id" "your app id", "x parse rest api key" "your rest api key", "content type" "application/json" } payload = {"text" text} response = requests post(url, json=payload, headers=headers) return jsonify(response json()), response status code ステップ5 – 認証の設定 back4appダッシュボードでユーザー認証を有効にするか設定する back4appはデフォルトで user クラスを利用します。parseはパスワードのハッシュ化、セッショントークン、および安全なストレージを処理します。これらの機能は app settings で管理できます。 コードサンプル @app route('/signup', methods=\['post']) def sign up user() data = request get json() username = data get('username') password = data get('password') email = data get('email') user = parse user() user username = username user password = password user email = email try user sign up() return jsonify({"success" true}), 200 except exception as e return jsonify({"error" str(e)}), 400 @app route('/login', methods=\['post']) def log in user() data = request get json() username = data get('username') password = data get('password') try parse user login(username, password) return jsonify({"success" true}), 200 except exception as e return jsonify({"error" str(e)}), 400 ソーシャルログイン back4appとparseは、google、apple、facebookなどのソーシャルプロバイダーと統合できます。設定の詳細は異なるため、公式の parseソーシャルログインドキュメント https //www back4app com/docs/platform/sign in with apple を参照してください。 ステップ6 – ファイルストレージの取り扱い ファイルストレージの設定 flaskからparseデータベースにファイルをアップロードするには、nodeベースの環境で parse file() オブジェクトを作成するか、pythonから直接rest呼び出しを使用できます。これらのファイルへの参照をクラスに保存すると、簡単に取得できるようになります。 @app route('/upload file', methods=\['post']) def upload file() file = request files\['file'] # from an html form or an api call file name = file filename url = "https //parseapi back4app com/files/" + file name headers = { "x parse application id" "your app id", "x parse rest api key" "your rest api key", "content type" file content type } response = requests post(url, data=file read(), headers=headers) return jsonify(response json()), response status code 例 ファイルをアップロードした後、データベースに保存できるファイルurlが受け取れます。その後、必要に応じてそのファイルを htmlテンプレート でレンダリングまたは参照できます。 ステップ7 – メール確認とパスワードリセット 概要 メール確認は有効なメールアドレスを保証し、パスワードリセットはユーザーが安全にアカウントにアクセスできるようにします。 back4appダッシュボードの設定 back4appダッシュボードの メール設定 に移動します。 メール確認を有効にする と、 メールテンプレートを設定する 。 パスワードリセットを有効にする ことで、ユーザーのメールにパスワード回復リンクを送信します。 コード/実装 有効にすると、メールでサインアップする新しいユーザーは確認リンクを受け取ります。パスワードリセットについては、rest経由またはflaskルートからparseの組み込みメソッドを呼び出すことができます。 ステップ8 – クラウドジョブによるタスクのスケジューリング クラウドジョブの機能 cloud jobsを使用すると、データのクリーンアップや定期的なメール送信などのバックグラウンドタスクをスケジュールできます。たとえば、ユーザーの介入なしに毎日古いレコードを削除できます。 例 // main js parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo'); const query = new parse query(todo); const now = new date(); const thirty days = 30 24 60 60 1000; const cutoff = new date(now thirty days); query lessthan('createdat', cutoff); try { const oldtodos = await query find({ usemasterkey true }); await parse object destroyall(oldtodos, { usemasterkey true }); return `deleted ${oldtodos length} old todos `; } catch (err) { throw new error('error during cleanup ' + err message); } }); 次に、back4appダッシュボードから アプリ設定に移動 > サーバー設定 > バックグラウンドジョブ このジョブをスケジュール して、毎日または希望の間隔で実行します。 ステップ9 – ウェブフックの統合 定義 webhooks は、特定のトリガーが発生したときに、back4appアプリが外部サービスにデータを送信できるようにします。これは、決済ゲートウェイ、slack、分析、またはその他のサードパーティサービスとの統合に役立ちます。 設定 webhooksの設定に移動 します。back4appダッシュボード > その他 > webhooks。 新しいwebhookを追加 します。 エンドポイントを設定 します(例: https //your external service com/webhook endpoint https //your external service com/webhook endpoint )。 トリガーを選択 します。webhookが発火するトリガーです。 例 「todo」に新しいレコードが作成されるたびにslackチャンネルに通知したい場合は、slackのwebhook urlを設定します。次に、新しいtodoが保存されるたびに、slackはその詳細を含むpostリクエストを受け取ります。 ステップ10 – back4app管理パネルの探索 この back4app管理アプリ は、チームの非技術的メンバー向けにユーザーフレンドリーなインターフェースを提供します。これは、crud操作やエンタープライズレベルのタスクのための モデル中心 インターフェースです。 どこで見つけるか アプリダッシュボードに移動します 選択します その他 > 管理者アプリ を有効にします。 管理者ユーザーを作成し、パネルをホストするサブドメインを選択します。 有効にすると、管理者の資格情報でログインして、カスタムエンドポイントやクエリをpythonコードに書かずに、データをより便利に管理できます。 結論 この包括的なチュートリアルに従うことで、あなたは 安全なバックエンド をback4app上のflaskアプリのために作成しました。 データベースを構成しました クラススキーマ、データ型、関係を使用して。 リアルタイムクエリを統合しました (ライブクエリ)で即時データ更新を実現しました。 セキュリティ対策を適用しました aclとclpを使用してデータアクセスを保護および管理しました。 cloud codeを実装しました サーバー側でカスタムビジネスロジックを実行するための関数。 ユーザー認証を設定しました メール確認とパスワードリセットをサポートしています。 ファイルのアップロードを管理しました オプションのファイルセキュリティコントロール付きで。 cloud jobsをスケジュールしました 自動化されたバックグラウンドタスクのために。 webhookを使用しました 外部サービスと統合するために。 back4app管理パネルを探索しました データ管理のために。 堅牢なflask バックエンドフレームワーク があり、 テンプレートを返す ファイル(必要に応じて)と強力なback4appのセットアップがあるため、機能豊富でスケーラブルかつ安全なアプリケーションを開発する準備が整いました。 あなたは flask run コマンドを実行して 開発サーバー を起動し、コーディングを続けることができます。 コマンドライン タスクは メソッドの定義後 jsonペイロードを受け入れるルートで簡単になります。 次のステップ 生産準備が整ったflaskアプリを構築する このバックエンドを拡張して、より複雑なデータモデル、キャッシング戦略、パフォーマンス最適化を処理します。 高度な機能を統合する 専門的な認証フロー、役割ベースのアクセス制御、または外部api(支払いゲートウェイなど)を含みます。 back4appの公式ドキュメントを確認する 高度なセキュリティ、パフォーマンス調整、ログ分析についての詳細な情報を得るために。 他のチュートリアルを探る リアルタイムチャットアプリケーション、iotダッシュボード、または位置情報ベースのサービスに関するものです。ここで学んだ技術をサードパーティのapiと組み合わせて、複雑な実世界のアプリケーションを作成できます。