16

私の Web には、 ClientProfessionalの 2 つのユーザー タイプがあります。2 つの「メイン モジュール」もあり、1 つはクライアントが商品などを購入するためのもの (メイン サイト) で、もう 1 つは専門家が運用を管理するためのものです。認証については、次のものが必要です。

  • ユーザーがクライアントか専門家かを検出し、適切なモジュール (メイン サイトまたは管理サイト) に転送する単一の「サインイン」フォーム。
  • クライアント用と専門家用の 2 つの「サインアップ」フォーム。おそらく、サイトはユーザーに専門家として登録するかクライアントとして登録するかを尋ね、それぞれの場合に適切な登録フローをトリガーします。
  • クライアントは「メイン サイト」を使用し、「管理サイト」の使用を許可されるべきではありません。
  • 専門家は「管理サイト」を使用しますが、メイン サイトへのサインインは許可されていません。
  • 専門家とクライアントの両方がユーザーとして登録され、ユーザー名、電話番号、電子メールなどの共通フィールドを共有します...

Django では認証に 2 つのモデルを使用できないためです。AbstractBaseUserをサブクラス化するカスタム モデルを作成しました。これは、Client および Professional の基本認証クラスとして機能します。

class BaseUser(AbstractBaseUser):
  ...

class Client(BaseUser):
  ...

class Professional(BaseUser):
  ...

また、AUTH_USER_MODEL設定を次のように変更しました。

AUTH_USER_MODEL = 'myapp.BaseUser'

ユーザー登録と認証を管理するために、 django-allauthも含めました。しかし今、私は立ち往生しています。Django/Python を使い始めたばかりで、これを解決する方法がわかりません。

これを行うための公式に推奨される方法はないようです ( Implementing multiple user types with Django 1.5 )。サブクラス化アプローチに固執する必要がありますか、それともドキュメントで指摘されている OnetoOne 関係を行う必要がありますか?

モデルを適切にセットアップしたら、2 つの登録フォームをどのように処理すればよいですか? django-allauth でこれを達成することは可能ですか、それとも手動で行う必要がありますか?

私の知る限り、新しいユーザーが登録されると、User テーブルに新しいベース ユーザーが作成されます。しかし、ユーザー専門化 (クライアントまたはプロフェッショナル) を作成するので、対応するテーブルにクライアント関連データまたはプロフェッショナル関連データも作成することをどのように指定すればよいでしょうか?

私はDjangoにかなり慣れていないので、アドバイスが役に立ちます

4

1 に答える 1