Views.py를 설계할 때, 도착하는 http요청에 의해서 발생하는 에러들은 최대한 백엔드 개발자가 의도한 것이어야 하며, 500에러를 최대한 지양하는 방향으로 설계되는 것이 바람직하다.
내가 지금 설계중인 account앱에서의 에러핸들링
```python
class SignupView(View):
def post(self, request):
data = json.loads(request.body)
emvalidator = re.search('[a-zA-Z0-9._+-]+@[a-zA-Z0-9.-]+(.[a-zA-Z]{2,4})', data["email"])
##추후 이메일이 형식에 맞게 판단하기위한 벨리데이터, 자세한 내용은 밑에 설명하겠다.
try:
user_data = Account.objects.get(email = data["email"])
return JsonResponse({"message" : "EMAIL_ALREADY_EXISTS"}, status = 400)
##기본적으로 이메일 주소가 DB에서 찾아지면 회원 가입이 불가능하므로 Bad Request Error리턴
except KeyError:
return JsonResponse({"message" : "WRONG_KEY"}, status = 400)
##프론트에서 키가 잘못넘어왔을 경우를 대비한 키에러 핸들링
except Account.DoesNotExist:
##위의 에러에 걸리지 않았을 경우 이메일 형식과 패스워드 길이가 충족되면 가입
if not emvalidator :
return JsonResponse ({"message" : "WRONG_EMAIL_FORMAT"}, status = 400)
##이메일 포멧이 맞지않으면 Bad Request Error 리턴
elif len(data["password"]) < 7:
return JsonResponse ({"message" : "PASSWORD_TOO_SHORT"}, status = 400)
## 패스워드가 6자를 넘지 않으면 Bad Request Error 리턴
else :
byted_pw = bytes(data["password"], encoding="utf-8")
hashed_pw = bcrypt.hashpw(byted_pw, bcrypt.gensalt())
decoded_pw = hashed_pw.decode("utf-8")
Account(
email = data["email"],
password = decoded_pw,
).save()
return JsonResponse({"message" : "SIGNUP_SUCCESS"}, status = 200)
##이 모든 조건에 걸리지 않았을때만 회원가입 가능하도록 함
```
다만 이 로직에서 걸리는 것은 메인로직?에서 회원가입을 처리하고 그 와중에 예외들이 발생했을 경우 에러 메시지가 리턴되는것이아니라 이런저런 예외를 모두 걸러낸 후 회원가입이 이루어지는식의 코드가 짜여졌다는 점인데, 이부분에 대해서는 리뷰 후에 개선이 이루어지면 포스팅하도록 하겠음.
```python
payload = {```
```python
from datetime import datetime, timedelta
WINFOR_SECRET = {
'exp_time': datetime.now() + timedelta(seconds = 60 60 24), ```