4

ログインを持っていないユーザーのサブセットを作成したいと思います... 基本的に、その人に関連付けられた本格的なアカウントを持たずに写真家フィールドを写真に追加する方法として (多くの場合、彼らは実際にサイトにログインすることはありません)。注意点は、後でそれらのアカウントを有効にできるようにしたいということです.

したがって、UserProfile を使用して User テーブルを実際に拡張せずに、User テーブルに関連付ける「People」テーブルを設定する最善の方法は何かという問題になると思います。

4

7 に答える 7

8

ユーザー プロファイル( によって返される)django.contrib.auth.models.User.get_profileは、 User テーブルを拡張しません。設定でプロファイル モデルとして指定するモデルは、 toAUTH_PROFILE_MODULEを持つ単なるモデルです。設定は実際には、特定のインスタンスへのを持つ特定のモデルのインスタンスにアクセスするための便利な API です。ForeignKeyUserget_profileForeignKeyUser

そのため、1 つのオプションは、to が可能なプロファイル モデルを作成し、ForeignKeyモデルUserの代わりにこのプロファイル モデルにモデルをnull関連付けることです。これにより、存在しないユーザーのプロファイルを作成し、後日、登録済みのユーザーをプロファイルに関連付けることができます。PhotoUser

于 2008-10-05T14:53:46.883 に答える
3

ログインできないユーザーは?完全にランダムなパスワードを与えただけです。

import random
user.set_password( str(random.random()) )

ログオンできなくなります。

于 2008-10-05T18:57:26.020 に答える
3

独自の認証ルーチンを指定すると、好きなものをチェック (またはチェックしない) できます。通常のユーザー名で失敗した場合は、電子メール/パスワードで許可することもできます (ただし、それは以下に示すものではありません)。

settings.py で:

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
    'userprofile.my_authenticate.MyLoginBackend', # if they fail the normal test
 )

userprofile/my_authenticate.py で:

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User

class MyLoginBackend(ModelBackend):
    """Return User record if username + (some test) is valid.
       Return None if no match.
    """

    def authenticate(self, username=None, password=None, request=None):
        try:
            user = User.objects.get(username=username)
            # plus any other test of User/UserProfile, etc.
            return user # indicates success
        except User.DoesNotExist:
            return None
    # authenticate
# class MyLoginBackend
于 2008-10-07T00:40:41.067 に答える
0

匿名アクセスが必要なため、User にリンクする ForeignKey フィールドを持つモデルを使用すると、期待どおりに機能しない場合があります。それが機能するかどうかはわかりませんが、代わりにAnonymousUser (ID は常に None です!)への ForeignKey を持たせるとどうなるか試してみてください。

試してみたら、ここに結果を投稿してください。

于 2008-10-06T22:31:06.413 に答える
0

django.contrib.auth.models.User は、デフォルトの認証バックエンド (データベースベース) を使用するためだけに存在します。独自のバックエンドを作成する場合は、通常のアカウントにパスワードを設定したまま、一部のアカウントをパスワードなしにすることができます。Django のドキュメントには、これに関する章があります。

于 2008-10-07T09:23:25.630 に答える
0

django authのドキュメントから、 User モデルを使用する場合は、ユーザー名とパスワードが必須であり、「匿名アカウント」はありません。デフォルトのパスワードでアカウントを作成し、人々が「実際の」アカウントを有効にする機会を与えることができると思います (自分でパスワードを設定することによって)。

User テーブルに関連付ける「People」テーブルを設定するには、ForeignKey フィールドを使用するだけです (これは、継承ではなく、User モデルに追加情報を追加するための推奨される方法です)。

于 2008-10-05T14:56:24.553 に答える
0

insin's answer に対する別の賛成票:これを a で処理しUserProfileます。 James Bennettは拡張について素晴らしい記事をdjango.contrib.auth.models.User書いています。彼はいくつかの方法を説明し、それらの長所と短所を説明し、UserProfile理想的な方法を示しています。

于 2008-10-07T22:09:42.917 に答える