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 |
Tags
- 스파르타내일배움캠프
- greedy
- 라이엇
- Django
- python
- 자바
- java
- 그리디
- 코딩테스트준비
- 백준
- 프로그래머스
- git
- github
- sort
- 리그오브레전드
- SQL
- 알고리즘
- 파이썬
- 그리디알고리즘
- 내일배움캠프
- lol
- programmers
- 코딩테스트
- API
- 탐욕알고리즘
- 장고
- Riot
- 스파르타내일배움캠프TIL
- drf
- 롤
Archives
- Today
- Total
Lina's Toolbox
Custom UserModel 활용하기 본문
Custom User Model
현재 UserModel은!
- Django의 기본 User Model을 사용하고 있습니다.
- 대부분의 프로젝트에서는 User Model에 더 많은 기능들이 필요합니다.
- Django는 AUTH_USER_MODEL setting을 변경하여 기본 User Model을 대체할 수 있습니다.
- 만약 기본 User Model을 사용하더라도 Custom User Model을 사용하는 것이 권장됩니다.
적용하기
⚠️ 주의
- AUTH_USER_MODEL 설정은 반드시 프로젝트 최초 마이그레이션에서 함께 진행하기를 권장합니다.
- USER Model은 비지니스로직 깊숙이 관여되기에 중간에 변경하면 많은 변경사항을 야기합니다.
User Model 정의하기
- accounts/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class User(AbstractUser):
pass
⇒ 기본 유저를 변경하지 않더라도 확장성을 위해 Custom User Model을 작성해요!
settings.py
...
AUTH_USER_MODEL = 'accounts.User'
...
accounts/admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
admin.site.register(User, UserAdmin)
- migration 적용하기
- 프로젝트 중간에 진행되므로 데이터베이스를 초기화하고 진행합니다.
- → 그렇지 않을 경우, 마이그레이션이 뒤엉키게 돼요!
- db.sqlite3 파일 삭제 및 모든 migration 삭제 후 다시 migration합니다.
💡 DB만 삭제하는게 아니라, 마이그레이션을 다시 다 해야하는 이유!
마이그레이션은 체이닝 되어있기 때문
0002는 0001에 dependecy를 가지고있다
(심지어 다른 앱의 마이그레이션과도)
회원가입 로직 수정
- 기존의 UserCreationForm은 Django의 기본 User 모델을 사용중이므로 해당 부분 수정이 필요합니다.
- → accounts.User를 바라보도록 상속을 통한 클래스를 재정의해요!
- forms.py
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = get_user_model()
fields = UserCreationForm.Meta.fields + (필요시 추가필드)
💡 CustomUserChageForm은 바꾸지 않아도 되는 이유가 뭘까??
→ 거기서는 auth.User가 아니라 get_user_model()로 이미 쓰고 있었기때문
1:N 관계 확장하기
User(1) - Article(N) 확장하기
articles/models.py
...
from django.conf import settings
class Article(models.Model):
...
author = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="articles")
...
import하고 settings.AUTH_USER_MODEL == get_user_model() == accounts.User 같은 것임.
그냥 다양한 방법일 뿐!
⇒ migration
author참조키 만들고 python manage.py makemigration하면 1,2 선택이 나온다.
1 선택 → default가 될 값 입력하여 그 값으로 채워주게 한다
우리는 1 로 입력! (1번 유저가 존재하므로!!)
articles/forms.py
→ 작성자를 제외해주는 것이 필요
articles/views.py
def create(request):
if request.method == "POST":
form =ArticleForm(request.POST, request.FILES)
if form.is_valid():
article = form.save(commit=False)
article.author = request.user
article.save()
return redirect("articles:article_detail", article.pk)
else:
form =ArticleForm()
context = {"form":form}
return reder(request, "articles/create.html", context)
과제 🔖
📢 게시글과 댓글을 아래 조건에 맞게 구현해볼까요?
<게시글>
- 게시글 작성자가 누구인지 글목록에서 보여주세요.
- 내가 작성한 게시글만 삭제할 수 있도록 만들어 주세요. (삭제가 가능한 경우만 삭제 버튼 노출)
- 내가 작성한 게시글만 수정할 수 있도록 만들어 주세요. (수정이 가능한 경우만 수정 버튼 노출)
<댓글>
- 댓글 작성에도 작성자를 적용해 주세요.
- 댓글 목록에서 작성자를 노출해 주세요.
- 로그인을 하지 않은 유저는 댓글을 입력하지 못하도록 해주세요.
- 내가 작성한 댓글만 삭제할 수 있도록 만들어 주세요. (삭제가 가능한 경우만 삭제 버튼 노출)
'스파르타 내일 배움 캠프 AI 웹개발 과정 > Django framework' 카테고리의 다른 글
Django에서 부트스트랩, Fontawesome사용 (0) | 2024.09.19 |
---|---|
Model Relationship (M:N) / 좋아요, 팔로우 기능 구현 (1) | 2024.09.16 |
Django Model Relationship (1:N) (0) | 2024.09.16 |
Django Admin (1) | 2024.09.12 |
Django Static & Media (0) | 2024.09.12 |