๐ŸงธZARANARA๐Ÿงธ - Day6[ํšŒ์›๊ฐ€์ž… ValidationError ์ถ”๊ฐ€]

์ด์œ ์ง„ยท2021๋…„ 12์›” 5์ผ
1

1st_project(ZARANARA)

๋ชฉ๋ก ๋ณด๊ธฐ
2/4
post-thumbnail

5์ผ์ฐจ๊นŒ์ง€ ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ view๋ฅผ ์ž‘์„ฑํ•œ ํ›„,
1์ฐจ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์ „์— ํด๋ก ํ–ˆ๋˜ Westagram ๋•Œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์—์„œ ํ•œ๋‹จ๊ณ„ ์ง„ํ™”ํ•ด์„œ ๋‹ค๋ฅธ๋ฐฉ์‹์œผ๋กœ๋„ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์–ด์„œ
์ €๋ฒˆ์— ์‚ฌ์šฉํ•ด๋ณด์ง€ ๋ชปํ•œ ValidationError๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๋”ฐ๋กœ ์ž‘์„ฑํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

*ํšŒ์›๊ฐ€์ž… views.py์— ValidationError ์ถ”๊ฐ€๋กœ ์ž‘์„ฑํ•œ ๋‚ด์šฉ๐Ÿ‘‡

*users app์— ์ž‘์„ฑํ•œ validation.py๐Ÿ‘‡

ํ•ด๋‹น ํŒŒ์ผ์€ ํšŒ์›๊ฐ€์ž…์˜ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ์— ๋Œ€ํ•œ ์—๋Ÿฌ์ฒ˜๋ฆฌ๋งŒ ์ž‘์„ฑ ํ•  ์˜ˆ์ •์œผ๋กœ,
validation.py ํŒŒ์ผ์„ core ํด๋”์—์„œ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , usersํด๋”์— ์ƒ์„ฑํ•˜์˜€๋‹ค.




์šฐ์„ !

์ด์ „, Westagram์˜ ํšŒ์›๊ฐ€์ž… views.py๋ฅผ ์ž‘์„ฑ ํ–ˆ์„๋•,
์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ–ˆ๊ณ , ์–ด๋–ค ๋ถ€๋ถ„์„ ๋‹ค๋ฅด๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋Š”์ง€ ํ™•์ธ ํ•ด๋ณด๊ธฐ๋กœ ํ•˜์ž!

์ด๋ฉ”์ผ๊ณผ ํŒจ์Šค์›Œ๋“œ์˜ ์ •๊ทœ์‹์— ๋Œ€ํ•œ ์กฐ๊ฑด๋ฌธ์„ ์ง์ ‘ views.py๋‚ด์— ์ž‘์„ฑํ•˜์—ฌ
๋ฐ”๋กœ Jsonํ˜•์‹์œผ๋กœ ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜์˜€๋‹ค.
(์•„๋ž˜ ์‚ฌ์ง„์€ Westagram ํšŒ์›๊ฐ€์ž… views.py์—์„œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ ์Šค์ƒท ๋ถˆํŽŒ๐Ÿ‘‡)

์ด๋ฒˆ 1์ฐจ ํ”„๋กœ์ ํŠธ ๋•,
django ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ง€์›ํ•ด์ฃผ๋Š”, django.core.validators๋ชจ๋“ˆ๊ณผ ์˜ค๋ฅ˜๋ฅผ ์ผ๋ถ€๋กœ ๋ฐœ์ƒ์‹œํ‚ค๋Š” raise๋ฅผ ์ด์šฉํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.
(์ž…๋ ฅํ•œ ๊ฐ’์ด ValidationError์˜ ์ผ๋ถ€ ๊ธฐ์ค€์„ ์ถฉ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด Error๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ํ˜ธ์ถœ ๊ฐ€๋Šฅ์„ ์ด์šฉํ•จ)

์ฒ˜์Œ์—”,


import json, re

from django.core.exceptions import ValidationError

def email_check(value):
   if re.match('^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$', value) is None:
       return JsonResponse({'ERROR' : 'EMAIL_ERROR'}, status=400)

# ์ตœ์†Œ 8์ž ์ด์ƒ, ๋ฌธ์ž, ์ˆซ์ž
def password_check(value):
   if not re.match("^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$", value):
       return JsonResponse({'ERROR' : 'password_ERROR'}, status=400)

๋ผ๊ณ  ์ž‘์„ฑํ–ˆ์—ˆ๋‹ค.

์—ฌ๊ธฐ์„œ <์ž ๊น!!>,
ํ•ด๋‹น ํŒŒ์ผ์— ์ž‘์„ฑํ•œ return์ด ํšŒ์›๊ฐ€์ž… views.py์—์„œ return ๋‚ด์šฉ์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ชปํ•˜๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ๋œ ๊ฒƒ์ด๋‹ค!!
Jsonํ˜•์‹์œผ๋กœ return์ด ์•„๋‹Œ, raise๋ฅผ ์ด์šฉํ•ด์„œ ์ผ๋ถ€๋กœ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ , ํ•ด๋‹น ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์ž‘์„ฑํ•ด๋„๋ก ํ•˜๊ฒ ๋‹ค.


import re

from django.core.exceptions import ValidationError

def email_check(value):
  if re.match('^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$', value) is None:
      raise ValidationError('EMAIL_ERROR')

# ์ตœ์†Œ 8์ž ์ด์ƒ, ๋ฌธ์ž, ์ˆซ์ž
def password_check(value):
  if not re.match("^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$", value):
      raise ValidationError('PASSWORD_ERROR')

์ด๋ฉ”์ผ ์œ ํšจ์„ฑ๊ฒ€์‚ฌํ•˜๋Š” ํ•จ์ˆ˜์ธ email_check์™€
ํŒจ์Šค์›Œ๋“œ ์œ ํšจ์„ฑ๊ฒ€์‚ฌํ•˜๋Š” ํ•จ์ˆ˜์ธ password_check๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด,
views.py์— ํ•ด๋‹น ํŒŒ์ผ์„ importํ•˜์—ฌ, ValidationError๋กœ ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

๊ฐ™์€ users ์ผ๊ฒฝ์šฐ,

from users.validation import email_check, password_check

๊ฐ€ ์•„๋‹Œ

 from .validation import emaiol_check, password_check

๋ผ๊ณ  ์ž‘์„ฑํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.




except์—์„œ as ๋’ค์— ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ์˜ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

try:
    ์‹คํ–‰ํ•  ์ฝ”๋“œ
except ์˜ˆ์™ธ as ๋ณ€์ˆ˜:
    ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ
profile
์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐฐ์›Œ๋‚˜๊ฐ€๋Š” ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€