응용 프로그램에서 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, 당신은 파이썬 수 있습니다. 자신의 상황에 따라!
마지막 단계 : 슈퍼 유저 만들기