01. Custom User Model
02. 1:N 관계 확장하기
01. 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은 비지니스로직 깊숙이 관여되기에 중간에 변경하면 많은 변경사항을 야기
# 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
회원가입 로직 수정
- 기존의 UserCreationForm은 Django의 기본 User 모델을 사용중이므로 해당 부분 수정이 필요
- → accounts.User를 바라보도록 상속을 통한 클래스를 재정의
# forms.py
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = get_user_model()
fields = UserCreationForm.Meta.fields + (필요시 추가필드)
02. 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")
...
⇒ migration
→ 작성자를 제외해주는 것이 필요
# 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)
게시글 작성자가 누구인지 글목록에서 보이기
articles/articles.html
내가 작성한 게시글만 삭제 및 수정할 수 있도록 만들기 (삭제 및 수정이 가능한 경우만 버튼 노출)
articles/articles_detail.html
댓글 작성에도 작성자를 적용 및 노출 (삭제 버튼 노출 어쩌구저쩌구)
articles/models.py
articles/forms.py
마이그레이션 한 후,
articles/views.py
articles/article_detail.html
로그인 안한사람 코멘트 못달게 하기
'Django' 카테고리의 다른 글
Django Bootstrap, Fontawesome (0) | 2024.08.22 |
---|---|
Model Relationship(M:N) (0) | 2024.08.21 |
Model Relationship (1:N) (0) | 2024.08.19 |
Admin (0) | 2024.08.19 |
Django Static, Media(runserver) (1) | 2024.08.19 |