Djangoのカスタム認証システム


 

 

アプリでmodel.py

django.db インポートモデル
 から django.contrib.auth.models インポート
    BaseUserManager、AbstractBaseUser、PermissionsMixin 

ここにあなたのモデルを作成します壁紙。


クラスUserProfileManagerに(BaseUserManager):
     DEFの CREATE_USER(セルフ、電子メール、名、パスワード= なし):
         "" 「
        ユーザーの作成
        「」」
        のIF  ないメール:
             昇給とValueError(あなたは電子メールアドレスを持っている必要があります

        ユーザー = self.model(
            メール =self.normalize_email(電子メール)、
            名前 = 名前、

        user.set_password(パスワード)
        user.save(使用 = self._db)
         リターン・ユーザー・

    デフcreate_superuser(自己、電子メール、名、パスワード
        ):""」
        创建并保存超级用户
        ""」
        ユーザー = self.create_user(
            電子メール、
            パスワード = パスワード、
            名前 = 名前、
        user.is_superuser = 
        user.save(使用 = self._db)
        リターンユーザー


クラスのUserProfile(AbstractBaseUser、PermissionsMixin):
    メール = models.EmailField(
        verbose_name = ' 邮箱' 
        MAX_LENGTH = 255 
        ユニーク = Trueの場合、

    名前 = models.CharField(max_lengthを= 32、verbose_name = " 用户名" 
    is_active = models.BooleanField(デフォルト= 真)
    is_staff = models.BooleanField(デフォルト= TRUE)

    オブジェクト = UserProfileManagerに()

    USERNAME_FIELD= ' メール'   登录的字段 
    REQUIRED_FIELDS = [ ' 名前' ]   必须要有的字段

    デフ __str__ (自己):
         リターンself.emailの

    デフget_full_name(自己):
        ユーザーは、自分のメールアドレスで識別された
        リターンself.email 

    デフget_short_name(自己):
        ユーザーは自分のメールアドレスで識別された
        リターンself.emailの

    クラスのMeta:
        権限 = " make_myself' ' カスタム権威" )、 

 

 

 

 

settings.pyファイルを設定する必要があります。

AUTH_USER_MODEL = 'app01.UserProfile'

 

 

コンフィギュレーションの下でadmin.pyアプリで:

Djangoのインポートフォーム

から django.contrib.auth.models インポートグループ
 から django.contrib.auth.adminの輸入BaseUserAdminとしてUSERADMIN
 から django.contrib.auth.forms インポートReadOnlyPasswordHashFieldを

から app01.models 輸入のUserProfileの


クラスUserCreationForm(forms.ModelForm):
     「」「新規ユーザーを作成するためのフォームが。必要なすべての付属
    のフィールドを、プラス繰り返してパスワードを入力します。『』」
    パスワード1 = forms.CharField(ラベル= 密码、ウィジェット=forms.PasswordInput)
    パスワード2 = forms.CharField(ラベル= ' 确认密码'、ウィジェット= forms.PasswordInput)

    クラスのMeta:
        モデル = のUserProfile 
        フィールド =(' メール'' 名前' 

    DEF clean_password2(自己):
         #1 確認すること2つのパスワードエントリが一致 
        パスワード1 = self.cleaned_data.get(パスワード1 
        パスワード2 = self.cleaned_data.get(パスワード2 場合はパスワード1 パスワード2 及びパスワード1 =!パスワード2:
             上げる forms.ValidationError(" 密码不匹配" の戻りパスワード2 

    デフ(=コミット、自己を救う真の):
        ユーザー。=スーパー()(=コミット保存偽)
         密码明文根据算法改成密文 
        user.set_password(self.cleaned_data [ " パスワード1 " ])
         場合はコミット:
            user.save()
        の戻りユーザー


クラスUserChangeForm(forms.ModelForm):
     ""」ユーザーを更新するためのフォーム。上のすべてのフィールド含まれ
    、ユーザーが、しかし、管理者のパスワードでのフィールドを置き換え
    パスワードハッシュ表示フィールド。
    ""」
    パスワード = ReadOnlyPasswordHashField()

    クラスのMeta:
        モデル = のUserProfile 
        フィールド =(' メール'' パスワード'' 名前'' is_active '" IS_SUPERUSER " 

    デフclean_password(自己):
        かかわらず、ユーザーが提供するものの、初期値を返します。
        これは、むしろフィールド上よりも、ここで行われている
        #のフィールドを初期値にアクセスする必要はありません
        戻り self.initialの[ パスワード] 


クラスUserProfileAdmin(BaseUserAdmin):
    フォームはユーザーインスタンスを追加し、変更する 
    フォームを= UserChangeForm 
    add_form = UserCreationForm 

    フィールドには、Userモデルを表示する際に使用されます。
    これらのベースUSERADMINの上に定義オーバーライド
    auth.Userの特定のフィールドを参照。
    list_display =(' メール'' 名前'' is_staff '' is_active '' IS_SUPERUSER ' 
    list_filter =(' IS_SUPERUSER ' 、)
    フィールドセット = 
        (なし、{ ' フィールド':(' 電子メール'' パスワード' )})、 ' 用户信息' { 'フィールド':(' 名前' )})、 ' 系统权限' { ' フィールド':(' IS_SUPERUSER ' ' is_staff ' ' is_active ' ' user_permissionsという' ' グループ' )})、 
    #1 add_fieldsetsでありますない標準ModelAdminの属性。USERADMIN 
    #は、ユーザーを作成するときに、この属性を使用するget_fieldsetsを上書きします。
            ' クラス':(' ワイド' 、)、
             ' フィールド':(' 電子メール'' '' パスワード1 '' パスワード2 ' )} 
        )、 
    search_fields =(' メール' 、)
    順序 =(' メール' 
    filter_horizo​​ntal =(' user_permissionsという'"グループ"

 

 

 

 

最後にpycharmレコードを生成するには、コマンドライン、およびデータベースに同期

 

 次のコマンドを入力します。のpython3 manage.py makemigrationsが

再び入力します。のpython3は移行manage.pyの

注意:私がここに持ってはのpython3インターフェイスを入力のpython3である、あなたはpythonのかもしれません。自分の状況によると!

 

 最後のステップ:スーパーユーザを作成します

 

おすすめ

転載: www.cnblogs.com/yunwangjun-python-520/p/11070566.html