Study Anything ๐Ÿง

์„œํ‰ ์ž‘์„ฑ (4) - ์„œํ‰์„ DB์— ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ค๊ธฐ (POST, GET) ๋ณธ๋ฌธ

ํ”„๋กœ์ ํŠธ/[Web] ์„œํ‰ ์ž‘์„ฑ ์‚ฌ์ดํŠธ

์„œํ‰ ์ž‘์„ฑ (4) - ์„œํ‰์„ DB์— ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ค๊ธฐ (POST, GET)

์†” 2022. 2. 4. 23:48

์ง€๋‚œ ํฌ์ŠคํŠธ๊นŒ์ง€ ๊ตฌํ˜„ํ–ˆ๋˜ ์„œํ‰ ์ž‘์„ฑ ๊ธฐ๋Šฅ๋“ค์€ ์žฅ๊ณ  ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ–ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ๊ฐ€ ๋‚˜๋ˆ ์ ธ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฉด์œผ๋กœ ๋ชจ์ƒ‰ํ–ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด์„œ ์ตœ์ข…์ ์œผ๋กœ ์žฅ๊ณ  ๋ ˆ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ (DRF: Django REST Framework) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ

ํ”„๋ก ํŠธ์ธ ๋ฆฌ์•กํŠธ์™€ ๋ฐฑ์—”๋“œ์ธ ์žฅ๊ณ ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ ์ž ํ•˜์˜€๋‹ค.

 

๊ทธ๋Ÿฌ๋˜ ์ค‘ ์˜ค๋Š˜ ๋“œ๋””์–ด!! ํ”„๋ก ํŠธ์ธ ๋ฆฌ์•กํŠธ ํŽ˜์ด์ง€์—์„œ ์ž‘์„ฑํ•œ ์„œํ‰์˜ ๋‚ด์šฉ์„

๋ฐฑ์—”๋“œ์ธ ์žฅ๊ณ  ๋ชจ๋ธ์— ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์„ ์™„์„ฑํ•ด์„œ ๊ทธ ๊ณผ์ •์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

 

 

(1) ์žฅ๊ณ  : review/urls.py

urls.py ํŒŒ์ผ์—์„œ๋Š” ์žฅ๊ณ  ์„œ๋ฒ„์˜ url ๋“ค์„ views.py ์˜ ํ•จ์ˆ˜๋“ค๊ณผ ์—ฐ๊ฒฐํ•˜๋Š” ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋‹ค.

path('', views.ReviewView.as_view()),	# ์„œํ‰ ๋ชฉ๋ก
path('write/', views.ReviewView.as_view()),	# ์„œํ‰ ์ž‘์„ฑ
path('<int:reviewId>/', views.ReviewView.as_view()),	# ์„œํ‰ ์„ธ๋ถ€๋‚ด์šฉ

๋‹ค์Œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด์„œ views.py ์˜ ReviewView ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 

 

 

(2) ์žฅ๊ณ  : review/views.py

views.py ์˜ ReviewView ํด๋ž˜์Šค ๋‚ด์šฉ์ด๋‹ค.

ํ•ด๋‹น ๊ตฌ์กฐ๋Š” ์žฅ๊ณ  ์Šคํ„ฐ๋”” ์นดํ…Œ๊ณ ๋ฆฌ์— ์ž‘์„ฑํ–ˆ๋˜ ๊ธ€์— ์ž์„ธํžˆ ์„ค๋ช…ํ•ด๋‘์—ˆ๋‹ค.

class ReviewView(APIView):
	...
    def post(self, request):
        data = request.data
        r : Review = Review (
            bookId = data.get('bid'),
            userId = User.objects.get(id=data.get('uid')),
            reviewTitle = data.get('rtitle'),
            reviewDate = date.today(),
            reviewRate = 0,     # ์ถ”ํ›„์— ํ‰์  ๋ฐ›์•„์™€์„œ ์ €์žฅ
            reviewTxt = data.get('text')
        )
        r.save()
        return Response({'message':'์„œํ‰ ๋“ฑ๋ก์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.'}, status=status.HTTP_200_OK)

    def get(self, request, **kwargs):
        if kwargs.get('reviewId') is None:	# ํŠน์ •๋ฆฌ๋ทฐ ์ง€์ •๋˜์ง€ ์•Š์•˜์„ ๋•Œ : ์ „์ฒด ๋ชฉ๋ก ๋ฐ˜ํ™˜
            review_qr_serializer = ReviewSerializer(Review.objects.all(), many=True)
            return Response(review_qr_serializer.data, status=status.HTTP_200_OK)
        else:	# ํŠน์ •๋ฆฌ๋ทฐ ์ง€์ •๋˜์—ˆ์„ ๋•Œ : ํ•ด๋‹น ๋ฆฌ๋ทฐ ๋ฐ˜ํ™˜
            reviewId = kwargs.get('reviewId')
            review_serializer = ReviewSerializer(Review.objects.get(reviewId=reviewId))
            return Response(review_serializer.data, status=status.HTTP_200_OK)
    ...

post ํ•จ์ˆ˜์—์„œ๋Š” review ์•ฑ์˜ ๋ชจ๋ธ์ธ Review ์— ๋“ค์–ด๊ฐˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•ด์„œ ๋ชจ๋ธ์— ์ €์žฅํ•˜๊ณ  Response() ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

get ํ•จ์ˆ˜์—์„œ๋Š” ๋ฏธ๋ฆฌ ์ž‘์„ฑํ–ˆ๋˜ Serializer ๋ฅผ ํ†ตํ•ด ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์ „์ฒด ๋ชฉ๋ก๊ณผ ์ƒ์„ธ ๋‚ด์šฉ์„ ๋ณด์—ฌ์ค€๋‹ค.

 

์„œํ‰์„ ์ž‘์„ฑํ•˜๋Š” ์›นํŽ˜์ด์ง€์˜ ๋ชจ์Šต์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์„œํ‰ ์ž‘์„ฑ ํŽ˜์ด์ง€

์ฑ… ์ด๋ฆ„๊ณผ ์ €์ž๋Š” ์™ธ๋ถ€ API๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์–ป์–ด์˜จ ๋ฐ์ดํ„ฐ๋กœ ๋ฏธ๋ฆฌ ์ฑ„์›Œ๋†“๊ณ  ์„œํ‰ ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•œ๋‹ค.

ํ•ด๋‹นํ•˜๋Š” ์ฑ…์˜ ISBN์„ bid ๋กœ, ์ž‘์„ฑํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ id๋ฅผ uid๋กœ, ์„œํ‰์˜ ์ œ๋ชฉ์„ rtitle๋กœ, ์„œํ‰ ๋‚ด์šฉ์„ text ๋กœ ๋ฐ›์•„์„œ ์žฅ๊ณ ๋กœ ๋„˜๊ฒจ์ฃผ๊ฒŒ ๋œ๋‹ค.

 

 

 

(4) ๊ฒฐ๊ณผํ™”๋ฉด

์œ„์˜ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ณ  ๋‚˜๋ฉด ์„œํ‰์„ ์ž‘์„ฑํ•˜๊ณ  ๋“ฑ๋ก ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ,

์™„๋ฃŒ ์•Œ๋ฆผ์ฐฝ

๋‹ค์Œ ๋ฉ”์„ธ์ง€๊ฐ€ ๋„์›Œ์ง€๊ณ  ์žฅ๊ณ  ๋ชจ๋ธ์— ์ •์ƒ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ๋‹ค.

 

๋ชจ๋ธ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์žฅ๊ณ  ์„œ๋ฒ„์—์„œ ํ™•์ธํ–ˆ๋‹ค.

Review ๋ชจ๋ธ

 

๊ทธ๋ฆฌ๊ณ  ์„œํ‰์˜ ์ „์ฒด ๋ชฉ๋ก ํ™”๋ฉด๊ณผ ์ƒ์„ธํŽ˜์ด์ง€๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ๋‚˜ํƒ€๋‚œ๋‹ค.

(์‚ฌ์ง„์ฒจ๋ถ€์˜ˆ์ •)

 

 

 

๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ๋Š” ์„ฑ๊ณตํ–ˆ์ง€๋งŒ ํ•œ ๊ฐ€์ง€ ์•„์‰ฌ์šด ์ ์€ Serializer๋ฅผ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ์ด๋‹ค.

์ด์ „์— ํฌ์ŠคํŒ…ํ•˜๋ฉด์„œ ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ์„ ํ™œ์šฉํ•ด์„œ REST API๋ฅผ ์ข€ ๋” ์ ํ•ฉํ•˜๊ฒŒ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๊ณ„์† ๊ณ ๋ฏผํ•ด๋ณด๊ฒ ๋‹ค.

 

 

 

 

728x90
Comments