AbstractUser
클래스로 내 사용자 정의 사용자 모델을 만들려고합니다.
class CustomUser(AbstractUser):
is_student = models.BooleanField(default=False)
is_teacher = models.BooleanField(default=False)
def __str__(self):
return self.username
class Student(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
def __str__(self):
return self.user.username
하지만 새 계정을 만들 때 암호 필드가 암호화되지 않을 경우 일반 텍스트 만 표시됩니다! 나는 내가 사용해야한다고 생각 BaseUserManager
하지만 나는 그것을 감사 할 생각이 없다, 안부 ..
새로운 사용자를 어떻게 생성하고 있는지 정확히 모르기 때문에 제 생각에는 다음과 같은 작업을하고있는 것 같습니다.
user = CustomUser.objects.create(username="boohoo", email="[email protected]", password="boohoopass")
이 사용자 개체는 암호를 일반 텍스트로 저장합니다. 장고는 자동으로 당신이라는 방법을 찾을 깊이 파고 아닌 경우 해시 값으로 텍스트로 변환하지 않습니다 make_password
또는 방법이있어 AbstractUser
, set_password
기본적으로 해시 값을 문자열로 변환합니다. 따라서 사용자를 만들 때 다음 방법 중 하나를 사용하십시오.
user = CustomUser.objects.create(username="boohoo", email="[email protected]")
user.passowrd = make_password("boohoopass")
# or
user.set_password("boohoopass")
더 나은 접근 방식은 자동으로이 작업을 수행 하는 UserManager
, 의 메서드를 사용하는 create_user
것입니다.
user = CustomUser.objects.create_user(username="boohoo", email="[email protected]", password="boohoopass")
업데이트 귀하의 경우 관리자 클래스도 UserAdmin
django에서 상속해야합니다 . 사용자 관리자는 암호 해시 키와 같은 것을 만들기 위해 특정 기능도 호출하기 때문입니다.
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as OrigUserAdmin
@admin.register(CustomUser)
class CustomUserAdmin(OrigUserAdmin):
list_display = (
'id', 'first_name', 'last_name', 'username', 'email', 'is_active'
)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다