(6) Django 인스타그램 클론코딩 user Model 만들기
이제부터 (6) 사용자 모델을 만들고, (7) 회원가입과 로그인 > (8) 로그인 세션 정보 유지 > (9) 로그아웃
이렇게 회원 정보에 관한 내용만 다루면 이번 클론 코딩은 끝이다.
그럼 이번 글에
서는 user model을 함께 만들어보자.
Django에서는 기본 user모델을 제공한다.
이러한 제공이 있기에, user model을 만드는 방법으로는 두가지가 있다.
- 기존 user모델을 커스텀하여 user model을 만든다.
- 완전히 새로운 user model을 만들다.
1번은 기본 함수들이 제공되기에 편리하다.
또한 이전에 db를 migration한 전적이 있다면 위의 사진처럼 내장 유저모델(auth_user)이 자동 생성된다.
따라서 2번 방법, 즉 커스텀 유저모델을 만들고 싶다면
(1) user 모델을 진작에 먼저 만들고 migration 하거나 아니면 (2) 지금 프로젝트에 있는 user model을 날리고 새로 만들어야한다.
앞으로 프로젝트를 만들 때는 사용자 모델을 어떻게 만들지 결정하고 시작하도록 하자 ~-~
우리는 2번 방법을 사용할 것이기 때문에 커스텀 유저 모델을 만들어야 한다.
그렇담 유저 모델을 정의해주자.
from django.contrib.auth.base_user import AbstractBaseUser
from django.db import models
# Create your models here.
class User(AbstractBaseUser):
'''
유저 프로필 사진
유저 닉네임 -> 화면에 표기되는 이름
유저 이름 -> 실제 사용자 이름
유저 이메일 주소 0> 회워가입시 사용되는 주소
유저 비빌번호
'''
profile_image = models.TextField() # profile image
nickname = models.CharField(max_length=24, unique=True)
name = models.CharField(max_length=24)
email = models.EmailField(unique=True)
USERNAME_FIELD = 'nickname'
class Meta:
db_table = "User"
열심히 만든 모델을 사용하도록 설정해줘야 한다.
settings.py
에 커스텀한것으로 user model을 쓸거라고 말해주자.
# 커스텀 유저 모델 사용
AUTH_USER_MODEL = "user.User"
이 코드를 추가하면 된다.
이렇게 다시 기존 database를 삭제하고 migration해주자
이번에는 auth_user
테이블은 생성되지 않았고 User
만 잘 생성되었다. (굳굳)
user파일에 들어가기에 앞서 urls.py
를 깔끔하게 정리해보자
기존 instagramProject
내부에 있던 content관련 urls를 분리하여 Content
폴더로 옮기고, 다시 instagramProject
에서 불러오는 구조로 바꿀 것이다.
Content/urls.py
from django.urls import path,include
from Content.views import UploadFeed
# url list를 두면된다.
# admin/ 은 default로 제공주는 것이다.
urlpatterns = [
path('upload', UploadFeed.as_view()), # post로 호출할 때는 마지막 /를 빼야한다.
]
주석문을 보면 알 수 있듯이 post호출은 마지막 /를 빼야한다고 한다.
그런데 빼면,,
안뜬다..
404에러가 뜬다. 이 에러는 페이지를 찾을 수 없다는 에러다..ㅜㅜ
혹시나 해서, 슬래쉬를 그냥 붙이니 제대로 동작했다..
(머지..? 무튼 해결했으니 됐음ㅇㅇ~)
계속해서 url를 설정해주자~
user/urls.py
from django.urls import path,include
from .views import Join
# url list를 두면된다.
# admin/ 은 default로 제공주는 것이다.
urlpatterns = [
path('join/', Join.as_view()), # post로 호출할 때는 마지막 /를 빼야한다.
path('login/', Login.as_view()), # post로 호출할 때는 마지막 /를 빼야한다.
]
이렇게 각 애플리케이션에 해당하는 url 파일을 따로 만들어주자.
user/views.py
from django.shortcuts import render
from rest_framework.views import APIView
# Create your views here.
class Join(APIView):
def get(self, request):
return render(request, "user/join.html")
class Login(APIView):
def get(self, request):
return render(request, "user/login.html")
def post(self, request):
# TODO 로그인
pass
후.. 이제 user의 view
쪽 파일을 구성하자.
살펴보면 새롭게 join과 login html 파일이 추가된 것을 확인할 수 있다. 해당코드는 참고한 블로그에서 가져와서 template/user
폴더 밑에 생성해줬다.
instagramProject/urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('main/', Main.as_view()),
# path('content/upload', UploadFeed.as_view()), # post로 호출할 때는 마지막 /를 빼야한다.
path('content/', include('Content.urls')),
path('user/', include('user.urls')),
]
마지막으로 include
함수를 통해 각 애플리케이션에 있는 urls
를 가져오면 된다.
접근은 content/upload
를 로컬 주소 이후에 치면 된다.
이로써, user model을 만들고 로그인과 회원가입 페이지로 넘어가는 url연결까지 끝냈다.
이제 다음 글에서 만든 폼에서 가져온 정보로 진짜 로그인과 회원가입을 해보자.