[DRF] DRF 복습 01. 회원가입

Yungsang Hwang·2022년 7월 2일
0

Django-Rest-Framework

목록 보기
2/15
post-thumbnail

DRF 회원가입 연습

DRF 회원가입 연습


📌문제

  1. DRF 회원가입을 위한 사용자 커스텀 모델을 생성하세요(10분)
    • username(CharField)
    • password(CharField)
    • fullname(CharField)
    • email(CharField)
    • 사용자에게 보여줄 Username은 username 필드로 설정하세요
    • 사용자를 새로 생성할 수 있도록 UserManager 클래스를 작성하세요
  2. 사용자 커스텀 모델로 ERD를 작성하세요(5분)
  3. DRF 회원가입을 위한 API 개발명세를 작성하세요(5분)
    • view 이름
    • endpoint
    • http method
    • request
    • response
      view 이름endpointhttp methodrequestresponse
  4. DRF 회원가입을 위한 URL을 작성하세요(1분)
  5. 회원가입한 내용을 보여줄 수 있도록 SERIALIZER를 작성하세요(3분)
  6. DRF 회원가입을 위한 VIEW를 작성하세요(5분)

🔥정답

1) DRF 회원가입을 위한 사용자 커스텀 모델을 생성하세요

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.forms import BooleanField

# Create your models here.
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를 작성하세요

DRF_PRACTICE - Chrome 2022-07-02 오전 11_01_05 (2).png

3) DRF 회원가입을 위한 API 개발명세를 작성하세요

희정

view 이름endpointhttp methodrequestresponseresponse2
UserViewuser/POST{

“username” : “admin”,
“password” : “123”,
“email” : “admin@gmail.com”,
”fullname” : “admin”
} | Response('message': '가입 완료’) | Response('message': '가입 실패!!!!!!’) |

view 이름endpointhttp methodrequestresponseresponseresponse2response3
UserViewuser/POST{

”username”:”admin”,
”password”:”1234”,
”fullname”:”admin”,
”email”:”admin@gmail.com”
} | serializer
{
”fullname” : ,
”email”
} | status_200 :
{
‘msg’ : ‘회원가입 성공! 환영합니다 {USER} 님!’
} | validation
{
‘error’ : ‘이미 존재하는 아이디입니다.’’
} | validation
{
‘error’ : ‘내용을 빠짐없이 입력해주세요’
} |

view 이름이름http methodendpointrequestresponse
UserView회원가입POSTuser/{

”username”:”admin”,
”password”:”1234”,
”fullname”:”admin”,
”email”:”admin@gmail.com”
} | |
| | 로그인 | POST | | | ({”message”:”로그인 완료”}) |
| | 로그아웃 | DELETE | | | |

4) DRF 회원가입을 위한 URL을 작성하세요

# proejct app

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('user/', include('user.urls')),
]
# user/urls.py

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}
profile
하루종일 몽상가

0개의 댓글