web-dev-qa-db-ja.com

SaaS PythonおよびDjango

PythonとDjangoを使用してSaaS(Software as a Service)アプリケーションを作成できるいくつかの記事/アプリケーションを教えてください。

今のところ、私が理解していない一般的なトピックは次のとおりです。

  1. すべてのクライアントに1つの動作するアプリケーションがありますか、それともクライアントごとに1つのアプリがありますか
  2. クライアントごとにデータベースアクセス、アクセス許可、または異なるDBをどのように管理しますか
  3. 1つのアプリをSaaSに変換できるツールはありますか
25
Ilian Iliev
  1. これにより、メンテナンスが容易になります。私はDjango-ikariのミドルウェアでホスト解決を処理します。
  2. あなたはしません。 #1を参照
  3. 私は以下を使用します:

    • Django-ikari :アンカーされた(サブ)ドメイン
    • Django-guardian :オブジェクトごとの権限
    • Django-tastypie :簡単なRESTful API
    • Django-userprofiles :Djangoよりも優れています-登録
    • Django-billing :プランベースのサブスクリプションコントロール
    • Django-価格設定:プランベースのサブスクリプション定義
  4. 必須ではありませんが、長期的には次のことが役立ちます。

    • Django-hunger :プライベートベータサインアップ
    • Django-ワッフル:機能フリップ
    • Django-classy-tags:素敵で簡単、かつきちんとしたテンプレートタグの作成
    • Django-マーチャント:抽象化された支払いゲートウェイフレームワーク
    • Django-mockups:モデルによる高速テスト
    • Django-merlin:より良いマルチステップフォーム(ウィザード)
  5. 最後に、持ってよかった

39
airtonix

あなたがそれについてどうやって行くかの非常に基本的な、基本的な例。

特定のビジネスケースを解決するように設計されたシンプルなアプリがあるとします。たとえば、オフィスの部屋の予約を処理するアプリを作成したとします。

このアプリをサービスに「変換」するには、アプリケーションのユーザー固有の部分のほとんどがパラメトリックになるように構成する必要があります( 「テンプレート化」-より優れたWordがないため)。

これは、フロントエンドが変換される方法です。アプリのロゴ、見出し、ティーザー、配色を保持する変数を作成できます。各ユーザーがインスタンスをカスタマイズできるようにします。

これまでのところ、アプリはフロントエンドでそれ自体をカスタマイズすることができます。フェーズ1で設計されたのと同じデータベースをまだ使用しています。

ここで、特定のユーザーに関連するフィールドのみを表示するという問題が発生します。これは、データベースのパラメーター化になります。したがって、各行を特定のユーザーに属するものとして識別する列を追加できます。次に、ログインしたユーザーに基づいてレコードをフィルタリングするビューまたはストアドプロシージャを作成します。

これで、アプリケーションを「レンタル」できるようになりました。ユーザーに基づいてインスタンスをカスタマイズできるためです。

その後、アプリケーションの規模、タイプ、および目的のカスタマイズに応じて、ここから大きくなります。各ユーザーがストアドプロシージャとビューの組み合わせではなく、専用のデータベースを持っていると、アプリケーションのパフォーマンスが向上すると判断する場合があります。

一部のユーザータイプ(または「パッケージ」)では、実行中のアプリケーションの専用インスタンスが必要であると判断する場合があります。したがって、「プレミアム」または「ウルトラ」ユーザーの場合は、独自の専用システムを実行する必要があります。

アプリケーションが大量のストレージを必要とする場合は、ストレージに対して個別に課金することを決定する場合があります。

肝心なのは、使用する言語とは何の関係もありません。アーキテクチャと設計の問題です。

9
Burhan Khalid

Software as a Serviceは単なるマーケティングワードであり、技術的にはインターネット経由でアクセス可能なサーバーと同じです。したがって、質問3は意味がありません。それは私たちに質問1と2を残します。

  1. この文脈での「アプリ」とはどういう意味ですか?あなたのウェブアプリケーション(PythonとDjangoで構築された)は複数のDjangoアプリ(ウェブアプリケーションを構成するコンポーネント)を持つことができますが、それはあなたが意味することではないと思います。Python/ Djangoでウェブサイトを構築し、ログインしているユーザー(クライアント)に応じてさまざまなカスタマイズオプションを設定できます。たとえば、プレミアムクライアントではいくつかの詳細オプションを有効にできますが、それでも同じコードベースの一部です。それだけです。一部のオプション(ボタン/コントロールなど)が特定のクライアントに表示されない

  2. Djangoには、ユーザー管理、権限、グループ用のツールがたくさんあります。各ユーザー(各クライアント)に異なるアクセス許可を与えることができ、これらのアクセス許可によってユーザーが実行できる操作が決まります。データベースアクセスは、Webアプリケーションで管理する必要があります。たとえば、コードは(ログインしているクライアントに応じて)Webページに表示する必要がある情報を決定し、そのコードはデータベースから情報を取得します。目的の規模に応じて、情報の取得に使用するデータベースを指定することもできます。

7
Simeon Visser

ブログ投稿 Djangoを使用してマルチテナントSAASWebアプリケーションを作成する方法の提案を説明しています。ここでのマルチテナンシーとは、ユーザーが登録するときにサブドメインを持つことを意味します。要点をまとめると:

  • すべてのテナントは1つのデータベースを共有しますが、それぞれに独自のスキーマがあります。あなたがウェブサイトabc.comを持っていて、誰かがxyzテナントを登録したと想像してください。 xyz.abc.comを介してページにアクセスし、次にテナントxyzすべてのテーブルを含む個別のスキーマがあるため、xyzテナントのみに関連するデータがカプセル化されます。他にも、1つのデータベースとすべてに1つのスキーマを使用する方法や、個別のデータベースを使用する方法もあります。しかし、スキーマアプローチは最良のトレードオフです。 Django-tenants ライブラリのドキュメントには、興味がある場合はより詳細な情報が含まれています
  • Django-tenants ライブラリを使用して、テナントとの作業を抽象化します。誰かがxyz.abc.comにアクセスするときは、xyzを知る必要があります。 )はテナントであり、xyzスキーマを使用する必要があります。 Django-tenants ライブラリがこれを行うため、リクエストごとにcurrent_tenant = request.tenantを実行するだけでテナントオブジェクトを取得できます
  • 共有テーブルとテナント固有のテーブルを区別する必要があります。たとえば、注文のリストを含むテーブルを持つことはテナント固有です。すべてのテナントには、すべての注文を含む独自のデータベースがある場合があります。このテーブルは、xyzスキーマ内にある必要があります。同時に、いくつかのコアDjangoテーブル(userなど)があります。データは共有できます。たとえば、2人のユーザーが同じメールで登録することを禁止します。
  • ワイルドカード式*。abc.comをキャッチするようにDNSを構成する必要があります。これには、を追加できます。 [〜#〜] a [〜#〜]レコードをサーバーのIPにリンクする*.abc.comを使用したCPanel内
4
Arsen Simonean