Custom permissions
맞춤 권한 설정을 위해 permissions 모델의 Meta 속성을 사용
class Task(models.Model):
...
class Meta:
permissions = [
("change_task_status", "Can change the status of tasks"),
("close_task", "Can remove a task by setting its status as closed"),
]
이것의 역할은 migrate를 할 때 추가적인 권한을 실행하는 것.
여기서 추가한 권한은 has_perm() 메소드를 통해 검사할 수 있다.
user.has_perm("app.close_task")
Extending the existing User model
User 모델을 확장하는 방법 첫번째, 프록시 모델 참고하기
두번째, OneToOneField로 참조하기
from django.contrib.auth.models import User
class Employee(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
department = models.CharField(max_length=100)
u = User.objects.get(username="fsmith")
freds_department = u.employee.department
Substituting a custom User model
Django는 맞춤 모델을 참조하는 AUTH_USER_MODEL 설정값을 제공.
기본 사용자 모델을 오버라이드 할 수 있다.
AUTH_USER_MODEL = "myapp.MyUser"
Using a custom user model when starting a project
기본 User모델 쓰지말고 이거쓰는걸 강력 추천
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
어드민 페이지 등록방법
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
admin.site.register(User, UserAdmin)
Changing to a custom user model mid-project
프로젝트 중간에 AUTH_USER_MODEL을 변경하는 것은 매우 어려움.
수동으로 스키마를 수정하고, 데이터를 이전해야한다. (하지말라)
Reusable apps and AUTH_USER_MODEL
재사용 가능한 앱은 맞춤 사용자 모델을 구현하면 안된다.
사용자 모델이 구현된 재사용 가능한 앱은 두개가 동시에 사용이 불가능하기 때문에.
앱마다 사용자 정보를 저장해야 한다면? ForeignKey나 OneToOneField를 AUTH_USER_MODEL로 사용
Referencing the User model
User를 직접 참조한다면 (Fk 등) AUTH_USER_MODEL 설정이
다른 사용자 모델로 변경되었을 때 코드가 동작하지 않을 것
django.contrib.auth.get_user_model() 은 현재 사용중인 user model를 반환해준다.
Specifying a custom user model
기본 인증 백엔드를 사용한다면 model은 인증을 위한 unique field가 있어야한다.
(맞춤 인증 백엔드가 없다면)
custom user model을 만드는 가장 쉬운 방법은 AbstractBaseUser를 상속하는 것.
이 추상 클래스는 해쉬 비밀번호, 토큰화된 재설정을 포함한다.
class MyUser(AbstractBaseUser):
identifier = models.CharField(max_length=40, unique=True)
...
USERNAME_FIELD = "identifier"
여기서 identifier는 username이 될 수도, email이 될 수도 있다. Unique하기만 하면 OK
REQUIRED_FIELDS
createsuperuser를 사용해서 user를 만들 때 입력해야하는 필드 이름들 목록
is_active
계정의 활성화 여부, 디폴트 값으로 True가 제공됨.
세부 사항은 is_active attribute on the built-in user model 문서를 참조
'Python > Django' 카테고리의 다른 글
카카오 소셜 로그인 in Django (0) | 2023.05.30 |
---|---|
Django MySQL 설정하기 (0) | 2023.05.30 |
Django 공식문서 읽기 - Customizing authentication in Django(3) (0) | 2023.05.02 |
Django 공식문서 읽기 - Customizing authentication in Django(2) (0) | 2023.05.02 |
Django 공식문서 읽기 - Customizing authentication in Django(1) (2) | 2023.04.30 |
댓글