3661sy / Used_car-API

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Used_car-API

0. Tech Stack๐Ÿ’ป

์ด ํ”„๋กœ์ ํŠธ๋Š” Django์™€ djangorestframework๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

Django v3.1.3
Djangorestframework v3.12.2
Djangorestframework-jwt v1.11.0

1. Install๐Ÿ› 

ํ”„๋กœ์ ํŠธ ๋ ˆํผ์ง€ํ† ๋ฆฌ๋ฅผ ํด๋ก ํ•ฉ๋‹ˆ๋‹ค.

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

2. Code๐Ÿ“‘

###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

3. ๋ฏธ๊ตฌํ˜„ ๊ธฐ๋Šฅ

3.1 ๋‹ค์ค‘ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ

์„œ๋ฒ„์— Image์™€ JSON์„ ํ•จ๊ป˜ ๋ณด๋‚ด์•ผํ•  ๊ฒฝ์šฐ ๋Œ€ํ‘œ์ ์œผ๋กœ

  • Multipart/form-data๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•
  • Base64๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ JSON ๊ฐ์ฒด์— ํ•จ๊ป˜ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•
  • Image ํŒŒ์ผ๊ณผ JSON์„ ๋ณ„๋„๋กœ ์—…๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•

์œ„ 3๊ฐ€์ง€์˜ ๋ฐฉ๋ฒ• ์ค‘, Multipart/form-data์™€ Base64๋กœ ์ธ์ฝ”๋”ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ณ ๋ฏผํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” Base64๋กœ ์ธ์ฝ”๋”ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋จผ์ € ์ƒ๊ฐํ•˜์˜€์œผ๋‚˜, ์ธ์ฝ”๋”ฉ๊ณผ ๋””์ฝ”๋”ฉ์— ๋Œ€ํ•œ ์ถ”๊ฐ€์  ์ž‘์—…์ด ํ•„์š”ํ•˜์˜€์œผ๋ฉฐ ์ด๋กœ์ธํ•œ ๋ถ€ํ•˜, ๊ทธ๋ฆฌ๊ณ  String์ด ๊ธธ์–ด์งˆ ๊ฒฝ์šฐ ์„œ๋ฒ„์—์„œ ์ฝ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ๋ฌผ์ƒ‰ํ•ด, form-data ๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์„ ๊ณ ๋ คํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

4. Question๐Ÿ™‹โ€โ™€๏ธ

4.1 ์„œ๋ฒ„์— ๋ณ€๋™์‚ฌํ•ญ์ด ์žˆ์„ ๊ฒฝ์šฐ ํ”„๋ก ํŠธ์—์„œ Redirect ์‹ ํ˜ธ๋ฅผ ์ค„ ๊ฒƒ์ธ๊ฐ€?

์˜ˆ์‹œ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋‘ ๊ฐœ์˜ ์ฐฝ์„ ๋™์‹œ์— ํ‚ค๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜์˜€์„ ๋•Œ, A๋ผ๋Š” ์ฐฝ์—์„œ ์ž„์‹œ์ €์žฅ์„ ๋ˆŒ๋Ÿฌ ์„œ๋ฒ„์—๋Š” A๋ผ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ž„์‹œ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ B๋ผ๋Š” ์ฐฝ์— ์žˆ๋˜ ๊ธฐ์กด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ์ €์žฅ๋œ A์˜ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€๋™ํ•  ๊ฒƒ์ธ์ง€, ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•  ๊ฒƒ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

4.2 ํšŒ์‚ฌ์—์„œ๋Š” django๋ฅผ ์ด์šฉํ•  ๋•Œ FBV(Function Base View)์™€ CBV(Class Base View) ์ค‘ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์งœ๋Š” ์ง€

์ œ๊ฐ€ ๊ฐœ๋ฐœํ•œ ์ฝ”๋“œ๊ฐ™์€ ๊ฒฝ์šฐ ํ•จ์ˆ˜๊ธฐ๋ฐ˜ View๋กœ ์ฝ”๋“œ๋ฅผ ์งฐ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์„œ ํšŒ์‚ฌ์—์„œ, ์ฆ‰ ํ˜„์—…์—์„œ๋Š” FBV์™€ CBV ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

4.3 ์‚ฌ์šฉํ•˜๋Š” DB๊ฐ€ ๋ฌด์—‡์ธ์ง€

๋ณด๋‚ด์ฃผ์‹  Notion๊ณผ ์‚ฌ์ดํŠธ์—๋„ DB๋Š” ๋ฌด์—‡์„ ์“ฐ๋Š”์ง€ ๋‚˜์˜ค์ง€ ์•Š์•„ ๊ฐœ์ธ์ ์œผ๋กœ ๊ถ๊ธˆํ•˜์—ฌ ์—ฌ์ญค๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

About


Languages

Language:Python 100.0%