1.drf 팀 프로젝트 - validation
문제점
유저 회원가입을 만드는 중, 나이 제한의 필요성이 생김
시도해 본 것들
view에서 if문을 통해 검증하기
class UserView(APIView):
def post(self, request):
serializer = UserSerializer(data=request.data)
try:
# request.data에서 'age'를 key로 value찾기
age = request.data['age']
except KeyError:
return Response({"message":"나이를 입력해주세요."}, status=status.HTTP_400_BAD_REQUEST)
if serializer.is_valid():
# value로 미성년자 if문 설정
if age >= 20:
serializer.save()
return Response({"message":"가입완료!"}, status=status.HTTP_201_CREATED)
else:
return Response({"message":"미성년자입니다."}, status=status.HTTP_406_NOT_ACCEPTABLE)
else:
return Response({"message":f"${serializer.errors}"}, status=status.HTTP_400_BAD_REQUEST)
print(request.data)로 age가 제대로 담기는 것을 확인
request.data['age']를 통해서 age 특정하기
try, except로 age가 없는 경우 예외처리
is_valid() 이후에 if문을 통해서 age 확인하기
view에서 가능할 것 같아서 이렇게 작성을 했는데 생각보다 너무 많은 분기가 생기면서 코드의 양이 크게 늘어난다.
model에서 해결하기
from django.core.validators import MinValueValidator, # MaxValueValidator
age = models.PositiveIntegerField('나이', validators=[MinValueValidator(20)])
# validators=[MinValueValidator(0),MaxValueValidator(5)])
나이 제한과 관련된 내용은 코드가 구현이 되어있으리라 생각해서 찾아본 결과 MinValueValidator라는 모듈이 존재했다.
이걸 넣는 순간 바로 처리가 가능해졌다.
해결 방법
from django.core.validators import MinValueValidator
age = models.PositiveIntegerField('나이', validators=[MinValueValidator(20)])
알게 된 점
있을 법한 기능을 구현한다면 이미 만들어진 코드가 있을 가능성이 높으므로 stackoverflow나 공식문서를 잘 살펴보자
2. python 문법 - dictionary comprehension
문제점
python 문법 공부 중 list말고 dictionary도 comprehension이 가능함을 알게 됐다.
시도해 본 것들
for문을 통한 방법
d = {'a': 8, 'b': 33, 'c': 15, 'd': 26, 'e': 12, 'f': 120, 'g':86}
dict1 = {}
for dicts in d.keys():
if d[dicts] >= 33:
dict1[dicts] = d[dicts]
print(dict1)
dictionary comprehension 사용
dict2 = {k: v for k, v in d.items() if v >= 33}
print(dict2)
{} 대신 dict()사용
print(dict((k, v) for k, v in d.items() if v >= 33))
filter와 lambda 사용
dict3 = dict(filter(lambda v: v[1] >= 33, d.items()))
print(dict3)
dict 대신 list로 확인
dict3 = list(filter(lambda v: v[1] >= 33, d.items())) # list 바꾸고 확인
print(dict3)
알게 된 점
list comprehension 말고 dictionary comprehension도 사용이 가능함을 배웠다.
아직 바로 작성하는데 어려움을 느끼는 lambda와 filter의 사용법을 재 확인했다.
'개발일지 > TIL' 카테고리의 다른 글
TIL 23-05-11 drf 팀 프로젝트 - git - PR후 작업, push취소, branch명 변경, commit내용 변경 (0) | 2023.05.11 |
---|---|
TIL 23-05-10 drf 팀 프로젝트 - 이메일 인증 (0) | 2023.05.11 |
TIL 23-05-08 DRF 팀 프로젝트 (0) | 2023.05.08 |
TIL 23-05-07 유클리드 호제법 (1) | 2023.05.07 |
TIL 23-05-06 백준 알고리즘 - 세준세비 (0) | 2023.05.06 |