원래 로그인은 function view를 썼었는데(DRF로 맨처음 만든 view라서 udemy 수업에서 한대로 따라했었다.) 다른 view들은 APIView 또는 generic View을 사용하니 로그인도 generic으로 바꾸고 싶었다.
username과 password만 다루는 LoginSerializer를 만들고 request로 들어온 값을 vadidate하고 만약 is_valid()에서 user가 리턴된다면 해당 username과 password는 유효하므로 토큰을 반환하지만ValidationError에 걸리면 유효하지 않은 정보이다.
generic view를 사용하니 더 깔끔해졌다. 처음에 Response에서 토큰을 그냥 써줬었는데 Json으로 serialize 할 수 없다고해서 str()을 적용해주었다. print 해봤을때는 그냥 string처럼 잘 나왔었는데 type을 찍어보니 <class 'rest_framework.authtoken.models.Token'>라고 나온다.
서로 코드 리뷰해주기
이제 각자 맡았던 view들이 1차적으로 완성이 되어서 서로 짠 뷰를 보고 코드리뷰를 했다. 서로 상대방의 코드를 보면서 이해가 안되는 부분이 있으면 질문하거나 좀 더 나은 방법이 있는지 고민했다.
Dash Board 뷰에서는 DeliveryInfo에서 리스트로 할당된 customer_ids의 length가 배송할 주문의 갯수이고 여기서 오늘 총 배달할 개수와 완료한 물건의 개수를 계산해서 전체와 기사님별로 보여줘야한다. 유진님이 작성하신 부분인데 for문도 많이 쓰일뿐더러 코드도 길어져서 고민이라고 하셔서 어떻게 해결하면 좋을지 같이 생각을 해보았다.
Annotation이나 Aggregation을 쓰면 뭔가 깔끔하게 해결할 수 있을 것 같은데 문제는 len(customer_ids)를 Annotation이나 Aggregation에 적용할 수 없다는 점이었다. 그럼 len(customer_ids)를 모델의 필드에 넣어야하는데 quantity = len(customer_ids)를 바로 모델에 넣으니 오류가 발생했다. 이 quantity만 해결되면 Annotaion이나 Aggregation을 사용해볼 수 있을텐데 아직은 어떻게 풀어나갈지 잘 모르겠다. 쉬운 방법이 있는데 내가 못찾고 헤메고 있는걸까?