์ด ํ๋ก์ ํธ๋ Django์ djangorestframework๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
Django v3.1.3
Djangorestframework v3.12.2
Djangorestframework-jwt v1.11.0
ํ๋ก์ ํธ ๋ ํผ์งํ ๋ฆฌ๋ฅผ ํด๋ก ํฉ๋๋ค.
git clone https://github.com/3661sy/Coding_test.git
ํ๋ก์ ํธ์ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ pip๋ฅผ ์ด์ฉํด ๋ค์ด๋ฐ์ต๋๋ค.
pip install django
pip install djangorestframework
pip install djangorestframework-jwt
๋ชจ๋ ์ค์น๊ฐ ๋๋๋ฉด ํ๋ก์ ํธ๊ฐ ์๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํด ์๋ฒ๋ฅผ ์คํํฉ๋๋ค.
cd Coding_test
python .\manage.py runserver
###views.py
@api_view(["POST"])
@permission_classes((IsAuthenticated, ))
@authentication_classes((JSONWebTokenAuthentication, ))
def add_car(request):
payload = json.loads(request.body)
try:
for data in payload['cars']:
Car = car.objects.create(
user=request.user,
accident=data["accident"],
repair=data["repair"],
manufacturer=data["manufacturer"],
price=data["price"]
)
return JsonResponse({'message': 'Success' }, safe=False, status=status.HTTP_201_CREATED)
except ObjectDoesNotExist as e:
return JsonResponse({'error': str(e)}, safe=False, status=status.HTTP_404_NOT_FOUND)
except Exception:
return JsonResponse({'error': 'Something is wrong'}, safe=False, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
POST
๋ก ๋ค์ด์จ JSON ๊ฐ์ฒด๋ฅผ for in
์ ์ฌ์ฉํ์ฌ ์ฐจ๋ก๋ก DB์ ๋ฃ์ ๋ค ์ ์ฅํฉ๋๋ค. ์ฑ๊ณต์ ์ผ๋ก ์ ์ฅ๋๋ฉด {'message': 'Success' }
์ ๋ฐํํฉ๋๋ค.
@permission_classes((IsAuthenticated, ))
@authentication_classes((JSONWebTokenAuthentication, ))
Decorator
์ ์ฌ์ฉํด ์ฌ์ฉ์์ ์ ๊ทผ๊ณผ JWT๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํฉ๋๋ค.
#setting.py
JWT_AUTH = {
'JWT_SECRET_KEY': SECRET_KEY,
'JWT_ALGORITHM': 'HS256',
'JWT_ALLOW_REFRESH': True,
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=14),
}
Access Token
์ ๋ง๋ฃ์๊ฐ์ ํ๋ฃจ๋ก ์ง์ ํ์ผ๋ฉฐ, Refresh Token
๊ฐ์ 2์ฃผ๋ก ์ง์ ํ์ต๋๋ค.
API ๋ช ์ธ์: https://documenter.getpostman.com/view/11976431/TVeqenc8
์๋ฒ์ Image์ JSON์ ํจ๊ป ๋ณด๋ด์ผํ ๊ฒฝ์ฐ ๋ํ์ ์ผ๋ก
Multipart/form-data
๋ก ๋ณด๋ด๋ ๋ฐฉ๋ฒBase64
๋ก ์ธ์ฝ๋ฉํ์ฌ JSON ๊ฐ์ฒด์ ํจ๊ป ๋ณด๋ด๋ ๋ฐฉ๋ฒ- Image ํ์ผ๊ณผ JSON์ ๋ณ๋๋ก ์ ๋ก๋ํ๋ ๋ฐฉ๋ฒ
์ 3๊ฐ์ง์ ๋ฐฉ๋ฒ ์ค, Multipart/form-data์ Base64๋ก ์ธ์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ณ ๋ฏผํ์์ต๋๋ค.
์ฒ์์๋ Base64
๋ก ์ธ์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ์ ๋จผ์ ์๊ฐํ์์ผ๋, ์ธ์ฝ๋ฉ๊ณผ ๋์ฝ๋ฉ์ ๋ํ ์ถ๊ฐ์ ์์
์ด ํ์ํ์์ผ๋ฉฐ ์ด๋ก์ธํ ๋ถํ, ๊ทธ๋ฆฌ๊ณ String์ด ๊ธธ์ด์ง ๊ฒฝ์ฐ ์๋ฒ์์ ์ฝ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์์์ต๋๋ค. ๋ฐ๋ผ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ฌผ์ํด, form-data
๋ก ๋ณด๋ด๋ ๋ฐฉ์์ ๊ณ ๋ คํ๊ฒ ๋์์ต๋๋ค.
์์๋ก ์ฌ์ฉ์๊ฐ ๋ ๊ฐ์ ์ฐฝ์ ๋์์ ํค๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ์์ ๋, A๋ผ๋ ์ฐฝ์์ ์์์ ์ฅ์ ๋๋ฌ ์๋ฒ์๋ A๋ผ๋ ๋ฐ์ดํฐ๊ฐ ์์์ ์ฅ๋์์ต๋๋ค. ํ์ง๋ง B๋ผ๋ ์ฐฝ์ ์๋ ๊ธฐ์กด์ ๋ฐ์ดํฐ๋ฅผ ์์์ ์ฅ๋ A์ ๋ฐ์ดํฐ๋ก ๋ณ๋ํ ๊ฒ์ธ์ง, ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์ ์งํ ๊ฒ์ธ์ง ๊ถ๊ธํฉ๋๋ค.
4.2 ํ์ฌ์์๋ django๋ฅผ ์ด์ฉํ ๋ FBV(Function Base View)
์ CBV(Class Base View)
์ค ์ด๋ค ๋ฐฉ์์ผ๋ก ์ง๋ ์ง
์ ๊ฐ ๊ฐ๋ฐํ ์ฝ๋๊ฐ์ ๊ฒฝ์ฐ ํจ์๊ธฐ๋ฐ View๋ก ์ฝ๋๋ฅผ ์งฐ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด์ ํ์ฌ์์, ์ฆ ํ์ ์์๋ FBV์ CBV ์ค ์ด๋ค ๊ฒ์ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋๋ฅผ ์ง๋ ์ง ๊ถ๊ธํฉ๋๋ค.
๋ณด๋ด์ฃผ์ Notion๊ณผ ์ฌ์ดํธ์๋ DB๋ ๋ฌด์์ ์ฐ๋์ง ๋์ค์ง ์์ ๊ฐ์ธ์ ์ผ๋ก ๊ถ๊ธํ์ฌ ์ฌ์ญค๋ณด๊ณ ์ถ์ต๋๋ค.