장고 사용자 정의 인증 시스템


 

 

응용 프로그램에서 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)
        반환 사용자 


클래스 사용자 프로필 (AbstractBaseUser, PermissionsMixin) : 
    이메일 = models.EmailField ( 
        verbose_name = ' 邮箱' , 
        MAX_LENGTH = 255 , 
        독특한 = 사실 
    ) 

    이름 = models.CharField (MAX_LENGTH = 32, verbose_name = " 用户名" ) 
    is_active = models.BooleanField (기본값 = 참) 
    is_staff = models.BooleanField (기본값 = 진정한는) 

    개체 = UserProfileManager () 

    USERNAME_FIELD를= ' 이메일 '   # 登录的字段 
    REQUIRED_FIELDS = ' 이름 ' ]   # 必须要有的字段

    DEF  __str__ (자기)
         self.email의 

    데프 get_full_name (자기) :
         # 사용자는 이메일 주소로 식별되는 
        복귀 self.email 

    데프 get_short_name (자동) :
         # 사용자는 자신의 이메일 주소로 식별 
        반환 self.email의 

    클래스 메타 : 
        권한 = ( 
            ( ' make_myself' , ' 사용자 권한 ' ) 
        )

 

 

 

 

settings.py 파일을 구성해야합니다 :

AUTH_USER_MODEL = 'app01.UserProfile'

 

 

구성에서 admin.py 응용 프로그램에서 :

에서 장고 수입 형태 

에서 django.contrib.auth.models 가져 오기 그룹
 에서 django.contrib.auth.admin의 수입 BaseUserAdmin로 UserAdmin
 에서 django.contrib.auth.forms 가져 ReadOnlyPasswordHashField을 

에서 app01.models가 가져 USERPROFILE의 


클래스 UserCreationForm (forms.ModelForm을) :
     "" " 새로운 사용자를 생성하기위한 형태. 필요한 모든 포함 
    필드, 플러스 반복 암호를. " "" 
    가 password1 = forms.CharField (레이블 = ' 密码' , 위젯 =forms.PasswordInput) 
    암호 2 = forms.CharField (레이블 = ' 确认密码' , 위젯 = forms.PasswordInput) 

    클래스 메타 : 
        모델 = 사용자 프로필 
        필드 = ( ' 이메일 ' , ' 이름 ' ) 

    데프 clean_password2 (자동) :
         #의 확인이 이 개 암호 항목이 일치 
        가 password1 = self.cleaned_data.get ( " 가 password1 " ) 
        암호 2 = self.cleaned_data.get ( " 암호 2 " )
        경우 가 password1  암호 2  password2를! = 암호 2 :
             인상 (forms.ValidationError을 " 密码不匹配" )
         반환 암호 2는 

    데프 (자기 = 커밋 저장 사실을) : 
        사용자 = 슈퍼 () (= 커밋 저장합니다. 거짓)
         # 密码明文根据算法改成密文 
        user.set_password (self.cleaned_data [ " 가 password1 " ])
         경우 커밋 
            user.save () 
        리턴 사용자 


클래스 UserChangeForm (forms.ModelForm)
     "" "사용자를 업데이트하는 양식. 모든 필드를 포함 
    사용자 만 관리자의와 암호 필드를 대체 
    암호 해시 표시 필드. 
    "" " 
    암호 = ReadOnlyPasswordHashField () 

    클래스 메타 : 
        모델 = 사용자 프로필 
        필드 = ( ' 이메일 ' , ' 비밀 ' , ' 이름 ' , ' is_active ' , ' is_superuser은 " ) 

    데프 (자신을) clean_password :
         #을에 관계없이 사용자가 제공하는 기능의 초기 값을 반환합니다. 
        # 때문이 아니라 필드에서보다 여기 이루어집니다 
        #의 필드가 초기 값에 액세스 할 수 없습니다 
        반환 self.initial를 [ " 비밀번호 " ] 


클래스 UserProfileAdmin (BaseUserAdmin) :
     # 폼이 추가로 변경 사용자 인스턴스의 
    형태 = UserChangeForm 
    add_form = UserCreationForm 

    # 필드는 사용자 모델을 표시하는 데 사용한다. 
    # 다음은 기본 UserAdmin의에 대한 정의를 오버라이드 (override) 
    # auth.User에 특정 필드를 참조합니다.
    list_display = ( ' 이메일 ' , ' 이름 ' , ' is_staff ' , ' is_active ' , ' is_superuser ' ) 
    list_filter = ( ' is_superuser ' ) 
    필드 셋 = ( 
        (없음, { ' 필드 ' ( ' 이메일 ' , ' 비밀 ' )}) 
        ( ' 用户信息' { '전지' ( ' 이름 ' )}) 
        ( ' 系统权限' { ' 필드 ' ( ' is_superuser ' , ' is_staff ' , ' is_active ' , ' user_permissions ' , ' 그룹 ' )}) 
    ) 
    #의 add_fieldsets 인 하지 표준 ModelAdmin 속성. UserAdmin 
    #은 사용자를 만들 때이 속성을 사용하는 get_fieldsets 우선합니다.
            ' 클래스 ' ( ' 와이드 ' ,),
             ' 필드 ' ( ' 이메일 ' , ' 이름 ' , ' password1 인 ' , ' 암호 2 ' )} 
        ) 
    ) 
    search_fields = ( ' 이메일 ' ) 
    순서 = ( ' 이메일 ' ) 
    filter_horizontal = ( ' user_permissions ' ,'그룹 ' )

 

 

 

 

마지막으로 pycharm 명령 줄은 기록을 생성하고, 데이터베이스에 동기화하기

 

 명령 입력 : python3의 manage.py의 makemigrations는

다시 입력 : python3의 manage.py의 마이그레이션

참고 : 여기있는 것은 python3 인터페이스를 입력 python3, 당신은 파이썬 수 있습니다. 자신의 상황에 따라!

 

 마지막 단계 : 슈퍼 유저 만들기

 

추천

출처www.cnblogs.com/yunwangjun-python-520/p/11070566.html