Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 비밀번호 수정
- 장고
- 이진 논리 회귀
- docker
- CNN
- 딥러닝
- original set
- Django
- 팀프로젝트 기획
- 프로필사진 업로드
- API명세
- 개인페이지
- json to db
- 댓글지우기
- DRF
- 다항 논리 회귀
- 머신러닝
- Python
- js
- python to json
- 댓글쓰기
- 와이어프레임
- 백엔드
- 프론트엔드
- 팔로우 기능 에러
- ERD
- test.py
- 북마크한 목록 가져오기
- class view
- serializer
Archives
- Today
- Total
코딩 개발일지
장고(Django) AbstractBaseUser의 models.py / admin.py 본문
장고가 기본 제공하는 user model을 쓰려면 AbstractUser 을 쓰면 된다. 간단한 프로젝트에서만 쓸듯?!
기본제공하는거 말고, custom을 해주고싶다면, AbstractBaseUser 를 써야한다.
그래서 보통은 AbstractBaseUser 를 쓰는게 좋다.
공식문서에서 AbstractBaseUser 를 admin.py와 models.py에 복사해서 넣어주고 custom 해주면 된다.
https://docs.djangoproject.com/en/4.2/topics/auth/customizing/
models.py
그대로 복사해서 쓰면,
class MyUserManager(BaseUserManager):
def create_user(self, email, date_of_birth, password=None):
"""
Creates and saves a User with the given email, date of
birth and password.
"""
if not email:
raise ValueError("Users must have an email address")
user = self.model(
email=self.normalize_email(email),
date_of_birth=date_of_birth,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, date_of_birth, password=None):
"""
Creates and saves a superuser with the given email, date of
birth and password.
"""
user = self.create_user(
email,
password=password,
date_of_birth=date_of_birth,
)
user.is_admin = True
user.save(using=self._db)
return user
create_user 는 user를 생성할 때, 필요한 정보를 넣는 곳이다.
class MyUserManager(BaseUserManager):
def create_user(self, email, date_of_birth, fullname, nickname, password=None):
"""
Creates and saves a User with the given email, date of
birth and password.
"""
if not email:
raise ValueError("Users must have an email address")
if not fullname:
raise ValueError('must have user fullname')
if not nickname:
raise ValueError('must have user nickname')
user = self.model(
email=self.normalize_email(email),
date_of_birth=date_of_birth,
fullname=fullname,
nickname=nickname,
)
user.set_password(password)
user.save(using=self._db)
return user
이런식으로 fullname, nickname 등을 추가할 수 있다.
create_superuser 도 마찬가지!!
다음!!!!!!!!
class MyUser(AbstractBaseUser):
email = models.EmailField(
verbose_name="email address",
max_length=255,
unique=True,
)
date_of_birth = models.DateField()
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
objects = MyUserManager()
USERNAME_FIELD = "email"
REQUIRED_FIELDS = ["date_of_birth"]
def __str__(self):
return self.email
def has_perm(self, perm, obj=None):
"Does the user have a specific permission?"
# Simplest possible answer: Yes, always
return True
def has_module_perms(self, app_label):
"Does the user have permissions to view the app `app_label`?"
# Simplest possible answer: Yes, always
return True
@property
def is_staff(self):
"Is the user a member of staff?"
# Simplest possible answer: All admins are staff
return self.is_admin
class MyUser는 database에 저장되는 columm을 생성해준다.
class User(AbstractBaseUser):
email = models.EmailField(
verbose_name="email address",
max_length=255,
unique=True,
)
date_of_birth = models.DateField()
followings = models.ManyToManyField(
'self', symmetrical=False, related_name="followers", blank=True)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
fullname = models.CharField(max_length=100)
nickname = models.CharField(max_length=100)
objects = MyUserManager()
USERNAME_FIELD = "email"
REQUIRED_FIELDS = ["date_of_birth", "nickname", "fullname"]
마찬가지로 fullname, nickname, followings 같은것들 추가해줄 수 있다.
admin.py
마찬가지로 공식문서에서 일부만 가져와보자.
class UserAdmin(BaseUserAdmin):
# The forms to add and change user instances
form = UserChangeForm
add_form = UserCreationForm
# The fields to be used in displaying the User model.
# These override the definitions on the base UserAdmin
# that reference specific fields on auth.User.
list_display = ["email", "date_of_birth", "is_admin"]
list_filter = ["is_admin"]
fieldsets = [
(None, {"fields": ["email", "password"]}),
("Personal info", {"fields": ["date_of_birth"]}),
("Permissions", {"fields": ["is_admin"]}),
]
# add_fieldsets is not a standard ModelAdmin attribute. UserAdmin
# overrides get_fieldsets to use this attribute when creating a user.
add_fieldsets = [
(
None,
{
"classes": ["wide"],
"fields": ["email", "date_of_birth", "password1", "password2"],
},
),
]
search_fields = ["email"]
ordering = ["email"]
filter_horizontal = []
list_display = ["id", "email", "is_admin",
"date_of_birth", "fullname", "nickname"]
list_display 를 고쳐주면, user정보의 썸네일(?ㅋㅋ)을 바꿔줄 수 있다.
fieldsets = [
("유저정보", {"fields": ["email", "password",
"date_of_birth", "fullname", "nickname"]}),
("Permissions", {"fields": ["is_admin"]}),
]
fieldsets 을 고쳐주면, user정보에 들어갔을 때의 화면에 추가된다.
'AI 본 교육 > AI 7주차' 카테고리의 다른 글
blank와null 차이점? / 권한설정 방법 2가지 / serializer 꿀팁 (0) | 2023.09.27 |
---|---|
이미지첨부 form-data (0) | 2023.09.22 |
백엔드(Django) + 프론트엔드(js, html) user기능 연결 (0) | 2023.09.21 |
장고(Django) stateful/stateless/쿠키/토큰 (0) | 2023.09.21 |
장고(Django) serializer / class view / CORS (0) | 2023.09.19 |