django 특강, 스터디

김하진·2022년 6월 16일
0

오늘부터 6시반에 기상을 해서 아침 스터디를 시작했다!!

아침 7시부터 코테를 연습하고, 8시부터는 cs지식을 공부한다.

이제 캠프가 평일로 치면 40일정도가 남은듯 하다. 40일이라는 시간을 헛되이 보내고 싶지 않고 남은 시간동안 최선을 다해야 캠프를

수료하는 의미가 있을 것 같다.

  • http method 의 종류
  • get : 조회
  • post : 생성
  • put : 수정
  • delete : 삭제

이제부터는 CBV 기반의 코딩을 한다. 지금까지는 함수가 기반으로 된 코딩을 했다면 django restfraemwork 를 이용하면서
클래스 를 기반으로 한 views.py 를 작성한다!

class UserView(APIView): # CBV 방식
    permission_classes = [permissions.AllowAny] # 누구나 view 조회 가능
    # permission_classes = [permissions.IsAdminUser] # admin만 view 조회 가능
    # permission_classes = [permissions.IsAuthenticated] # 로그인 된 사용자만 view 조회 가능

    def get(self, request):
        return Response({'message': 'get method!!'})

request 를 보내는 간단한 방식이다.
url만 연결을 해줘서 postman 을 이용해서 간단하게 API를 테스트 해볼 수 있다.

postman post 에서 에러가 발생할 때
var xsrfCookie = postman.getResponseCookie("csrftoken"); postman.setGlobalVariable('csrftoken', xsrfCookie.value);
을 test 에 추가하고

  • Key : X-CSRFToken
  • Value : {{csrftoken}}
    을 각각 넣어준다.
model = Model(
	field1="value1",
  field2="value2"
)
model.save()

# 추가2
Model.objects.create(
  field1="value1",
  field2="value2"
)

# 조회
Model.objects.all()
Model.objects.filter()
Model.objects.get()

# 수정1
model = Model.object.get(id=obj_id)
model.field = value
model.save()

# 수정2
Model.objects.filter(field__contains=value).update(
    field1="value1",
    field2="value2"
)

# 삭제
Model.objects.filter(field="value").delete()
Model.objects.get(id=obj_id).delete()

데이터 추가 조회 삭제, 개인적으로 연습해서 테스트 해볼 예정이다

custom user model

from django.contrib.auth.models import BaseUserManager, AbstractBaseUser

# custom user model 사용 시 UserManager 클래스와 create_user, create_superuser 함수가 정의되어 있어야 함
class UserManager(BaseUserManager):
    def create_user(self, username, password=None):
        if not username:
            raise ValueError('Users must have an username')
        user = self.model(
            username=username,
        )
        user.set_password(password)
        user.save(using=self._db)
        return user
    
    # python manage.py createsuperuser 사용 시 해당 함수가 사용됨
    def create_superuser(self, username, password=None):
        user = self.create_user(
            username=username,
            password=password
        )
        user.is_admin = True
        user.save(using=self._db)
        return user

class User(AbstractBaseUser):
    username = models.CharField("사용자 계정", max_length=20, unique=True)
    email = models.EmailField("이메일 주소", max_length=100)
    password = models.CharField("비밀번호", max_length=128)
    fullname = models.CharField("이름", max_length=20)
    join_date = models.DateTimeField("가입일", auto_now_add=True)

		# is_active가 False일 경우 계정이 비활성화됨
    is_active = models.BooleanField(default=True) 

    # is_staff에서 해당 값 사용
    is_admin = models.BooleanField(default=False)
    
    # id로 사용 할 필드 지정.
    # 로그인 시 USERNAME_FIELD에 설정 된 필드와 password가 사용된다.
    USERNAME_FIELD = 'username'

    # user를 생성할 때 입력받은 필드 지정
    REQUIRED_FIELDS = []
    
    objects = UserManager() # custom user 생성 시 필요
    
    def __str__(self):
        return self.username

    # 로그인 사용자의 특정 테이블의 crud 권한을 설정, perm table의 crud 권한이 들어간다.
    # admin일 경우 항상 True, 비활성 사용자(is_active=False)의 경우 항상 False
    def has_perm(self, perm, obj=None):
        return True
    
    # 로그인 사용자의 특정 app에 접근 가능 여부를 설정, app_label에는 app 이름이 들어간다.
    # admin일 경우 항상 True, 비활성 사용자(is_active=False)의 경우 항상 False
    def has_module_perms(self, app_label): 
        return True
    
    # admin 권한 설정
    @property
    def is_staff(self): 
        return self.is_admin

솔직히 아직 이해 안가는 부분도 많고 이것은 개속 코드를 보고 분석도 해보고 해봐야 할 것 같다.

def get(self, request):
        user = request.user
        all = Article.objects.filter(id=1)
        # all = Article.objects.filter(id=user)\
        titles = []
        for title in all:
            # print(title.title)
            titles.append(title)
            print(titles[0].title)
            user_title = serializers.serialize('json', titles)

        return Response({'message': '전송 성공!',"user_title":user_title})

오늘 과제중, 사용자의 게시물을 리턴하는 게 있었는데, CBV 형식에서는 무조건 json 형태로 리턴을 시켜줘야 하는거
같다. 리스트로 만들어서 serialize 를 써서 우선 return 은 시켰는데 좋은 방식인지는 모르겠다.

스터디

오늘 스터디에서 타임어택 테스트를 했다. 간단하게 팔로잉 팔로워 를 구현하는건데

아직 Many to Many 에 대한 이해가 부족한 것 같다. 오늘 테스트와 과제를 통해서 많은 부분이 이해가 됬는데

그동안 어떻게 프로젝트를 진행했나 싶다.

어떻게는 output을 출력하려고 노력했지, 어떻게 코드가 실행되고 어떻게 데이터가 가져와지고, 어떤 방식으로

코드가 돌아가는지에 대한 , 그리고 쿼리에 대한 이해도가 확실히 떨어져 있는 느낌이다.

이것들을 다시한번 짚어보고, 공부 할 수 있는 시간이 되서 너무 좋은 것 같다.

profile
진킴

0개의 댓글