DRF 회원가입 연습
DRF 회원가입 연습
📌문제
DRF 회원가입을 위한 사용자 커스텀 모델을 생성하세요(10분)
- username(CharField)
- password(CharField)
- fullname(CharField)
- email(CharField)
- 사용자에게 보여줄 Username은 username 필드로 설정하세요
- 사용자를 새로 생성할 수 있도록 UserManager 클래스를 작성하세요
사용자 커스텀 모델로 ERD를 작성하세요(5분)
DRF 회원가입을 위한 API 개발명세를 작성하세요(5분)
- view 이름
- endpoint
- http method
- request
- response
view 이름 | endpoint | http method | request | response |
---|
| | | | |
DRF 회원가입을 위한 URL을 작성하세요(1분)
회원가입한 내용을 보여줄 수 있도록 SERIALIZER를 작성하세요(3분)
DRF 회원가입을 위한 VIEW를 작성하세요(5분)
🔥정답
1) DRF 회원가입을 위한 사용자 커스텀 모델을 생성하세요
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.forms import BooleanField
class UserManager(BaseUserManager):
def create_user(self, username, email, fullname, password=None):
if not username:
raise ValueError('아이디를 꼭 적어주세요')
user = self.model(
username=username,
email=email,
fullname=fullname,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, username, email, fullname, password=None):
user = self.create_user(
username=username,
password=password,
email=email,
fullname=fullname,
)
user.is_admin = True
user.save(using=self._db)
return user
class User(AbstractBaseUser):
username = models.CharField("아이디", max_length=50, unique=True)
password = models.CharField("비밀번호", max_length=128)
fullname = models.CharField("실명", max_length=50)
email = models.EmailField("이메일", max_length=254)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['fullname', 'email']
objects = UserManager()
def __str__(self):
return self.fullname
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
@property
def is_staff(self):
return self.is_admin
2) 사용자 커스텀 모델로 ERD를 작성하세요
3) DRF 회원가입을 위한 API 개발명세를 작성하세요
희정
view 이름 | endpoint | http method | request | response | response2 |
---|
UserView | user/ | POST | { | | |
“username” : “admin”,
“password” : “123”,
“email” : “admin@gmail.com”,
”fullname” : “admin”
} | Response('message': '가입 완료’) | Response('message': '가입 실패!!!!!!’) |
view 이름 | endpoint | http method | request | response | response | response2 | response3 |
---|
UserView | user/ | POST | { | | | | |
”username”:”admin”,
”password”:”1234”,
”fullname”:”admin”,
”email”:”admin@gmail.com”
} | serializer
{
”fullname” : ,
”email”
} | status_200 :
{
‘msg’ : ‘회원가입 성공! 환영합니다 {USER} 님!’
} | validation
{
‘error’ : ‘이미 존재하는 아이디입니다.’’
} | validation
{
‘error’ : ‘내용을 빠짐없이 입력해주세요’
} |
view 이름 | 이름 | http method | endpoint | request | response |
---|
UserView | 회원가입 | POST | user/ | { | |
”username”:”admin”,
”password”:”1234”,
”fullname”:”admin”,
”email”:”admin@gmail.com”
} | |
| | 로그인 | POST | | | ({”message”:”로그인 완료”}) |
| | 로그아웃 | DELETE | | | |
4) DRF 회원가입을 위한 URL을 작성하세요
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('user/', include('user.urls')),
]
from django.urls import path
from . import views
urlpatterns = [
path('', views.UserView.as_view()),
]
5) 회원가입한 내용을 보여줄 수 있도록 SERIALIZER를 작성하세요
from rest_framework import serializers
from .models import User as UserModel
class UserSeiralizer(serializers.ModelSerializer):
class Meta:
model = UserModel
fields = "__all__"
6) DRF 회원가입을 위한 VIEW를 작성하세요
class UserView(APIView):
def post(self, request):
serializer = UserSeiralizer(data=request.data)
if serializer.is_valid():
serializer.save()
target_user = UserModel.objects.last()
target_user = {"fullname" : target_user.fullname,
"email" : target_user.email}