[Team22] DRF API ๋ฌธ์„œ - drf yasg
ยท
๐Ÿฅ”Project/Team22
์˜ค๋Š˜์€ ์žฅ๊ณ  REST Framework์—์„œ swagger๋ฅผ ํ†ตํ•ด API๋ฅผ ๋ฌธ์„œํ™” ํ•ด๋ณด์ž. ๋จผ์ € drf-ysag์— ๋Œ€ํ•œ ๋ฌธ์„œ๋Š” ์•„๋ž˜์˜ ๋งํฌ๋ฅผ ํ†ตํ•ด ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒ์„ธํ•œ ์ •๋ณด๋ฅผ ์›ํ•œ๋‹ค๋ฉด ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ํ™œ์šฉํ•˜์ž. https://drf-yasg.readthedocs.io/en/stable/ drf-yasg โ€” drf-yasg 1.21.7 documentation ยฉ Copyright 2018, Cristi V. Revision db42d356. drf-yasg.readthedocs.io install ๊ฐ€์ƒํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™” ํ•˜๊ณ  install ํ•˜์ž. pip install -U drf-yasg settings.py settings.py์— ๋‹ค์Œ์ด ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•œ๋‹ค. INSTALLED_APPS = [ ... 'django..
[Team22]django .env ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํ™œ์šฉํ•˜๊ธฐ
ยท
๐Ÿฅ”Project/Team22
์˜ค๋Š˜์€ django์—์„œ .envํŒŒ์ผ๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณธ๋‹ค.์žฅ๊ณ ์—์„œ๋Š” django-environ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์†์‰ฝ๊ฒŒ ํ™˜๊ฒฝ๋ณ€์ˆ˜์˜ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.envํŒŒ์ผ์— ํ™˜๊ฒฝ๋ณ€์ˆ˜๋“ค์„ ์ €์žฅํ•ด๋‘๊ณ  ๋กœ๋“œํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด๋‹ค .env ์ƒ์„ฑํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ์— .env ํŒŒ์ผ์„ ๋จผ์ € ์ƒ์„ฑํ•ด์ค€๋‹ค. ์ƒ์„ฑ ํ›„์—๋Š” ๊ผญ gitignoreํŒŒ์ผ์— .env๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊นƒํ—ˆ๋ธŒ์— ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š๋„๋ก ํ•œ๋‹ค. install django-environ๋‹ค์Œ์„ ํ„ฐ๋ฏธ๋„์— ์ž…๋ ฅํ•˜์—ฌ django-environ์„ ์„ค์น˜ํ•œ๋‹ค.pip install django-environ  .env ์ž‘์„ฑํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ’๋“ค์„ env์— ์ •์˜ํ•œ๋‹ค.๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.SECRET_KEY='django-insecure-...'DEBUG=True# MySQL..
[Team 22] DRF - Mixins
ยท
๐Ÿฅ”Project/Team22
Generic view์˜ ๊ฒฝ์šฐ CRUD์ž‘์—…์„ ์œ„ํ•œ ๊ณตํ†ต ๋ถ€๋ถ„์„ ์ œ๊ณตํ•˜๋Š” ๋ทฐ์ž„์„ ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ์•Œ์•„๋ณด์•˜๋‹ค. ์ œ๋„ค๋ฆญ ๋ทฐ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ Mixinํด๋ž˜์Šค๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ์˜ค๋Š˜์€ ์ œ๋„ค๋ฆญ๋ทฐ์™€ ํ•จ๊ผ ์“ฐ์ด๋Š” ๋ฏน์Šค์ธ ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž. Mixin ์†Œ๊ฐœ ๋ฏน์Šค์ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, Genericview๋ฅผ ์‚ฌ์šฉํ• ๋•Œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์‹ค์ƒ CRUD์ž‘์—…๊ณผ ๋ชฉ๋ก์ถœ๋ ฅ๊ฐ™์€ ์ž‘์—…์€ ์ˆ˜๋งŽ์€ ๋ทฐ์— ๊ณตํ†ต์ ์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ์ž‘์—…์ผ ๊ฒƒ์ด๋‹ค. ์ด ๊ธฐ๋Šฅ๋“ค์„ Mixin์„ ํ†ตํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. mixins๋Š” rest_framework.mixins ๋ชจ๋“ˆ์— ์žˆ๋‹ค. ListModelMixin .list(request, *args, **kwargs)๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ฟผ๋ฆฌ์…‹์˜ ๋ชฉ๋ก์„ ํ‘œ์‹œํ•œ๋‹ค. ์ฟผ๋ฆฌ์…‹..
[Team 22] DRF - Generic API View
ยท
๐Ÿฅ”Project/Team22
์˜ค๋Š˜์€ DRF์˜ Generic API VIew์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณธ๋‹ค. Generic API View ์ด ํด๋ž˜์Šค๋Š” ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ APIView๋ฅผ ํ™•์žฅํ•˜๋„๋ก ํ•˜๋Š” ํด๋ž˜์Šค๋‹ค. CRUD์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๋ถ„์„ ์ œ๊ณตํ•œ๋‹ค. mixins๋ฅผ ์‚ฌ์šฉํ•ด์„œ CRUD์˜ ํŠน์ • ์„ธ๋ถ€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ†ตํ•ด ์ง์ ‘ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•  ์ˆ˜ ์žˆ๋‹ค. [mixins ํฌ์ŠคํŒ…] https://he-kate1130.tistory.com/63 [Team 22] DRF - Mixins Generic view์˜ ๊ฒฝ์šฐ CRUD์ž‘์—…์„ ์œ„ํ•œ ๊ณตํ†ต ๋ถ€๋ถ„์„ ์ œ๊ณตํ•˜๋Š” ๋ทฐ์ž„์„ ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ์•Œ์•„๋ณด์•˜๋‹ค. ์ œ๋„ค๋ฆญ ๋ทฐ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ Mixinํด๋ž˜์Šค๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ์˜ค๋Š˜์€ ์ œ๋„ค๋ฆญ๋ทฐ์™€ ํ•จ๊ผ ์“ฐ์ด๋Š” ๋ฏน์Šค he-kate1130.tistory.com Ba..
[Team 22] DRF Authentication - dj-rest-auth
ยท
๐Ÿฅ”Project/Team22
์†Œ์…œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์ถ”ํ›„์— ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ dj-rest-auth๋ฅผ ์‚ฌ์šฉํ•ด ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด๋„๋ก ํ•˜์ž. ์‚ฌ์‹ค ์›๋ž˜๋Š” simple jwt๋ฅผ ํ™œ์šฉํ•ด์„œ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๊ณ  ์ฟ ํ‚ค์— ์ €์žฅํ•ด๋‘๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์ด๊ฒƒ์ €๊ฒƒ ์ฐพ์•„๋ณด๋‹ˆ ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ ์‹œ์— ์ •์‹ ๊ฑด๊ฐ•์— ์ƒ๋‹นํžˆ ์œ„ํ˜‘์ ์ธ ์Šค์ผ€์ผ๋กœ ์ผ์ด ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์Šฌํ”ˆ์†Œ์‹์—... dj-rest-auth๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค. https://dj-rest-auth.readthedocs.io/en/latest/index.html Welcome to dj-rest-authโ€™s documentation! โ€” dj-rest-auth 5.0.1 documentation Note dj-rest-auth version 1.0.0 now uses Djan..
[Team 22] Django REST framework (3) - Viewset
ยท
๐Ÿฅ”Project/Team22
์˜ค๋Š˜์€ DRF์˜ view set์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณธ๋‹ค. ์ด๋ฏธ ์•Œ๊ณ ์žˆ๋“ฏ์ด View๋Š” API์—”๋“œํฌ์ธํŠธ์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ๋™์ž‘๋“ค์„ ์ •์˜ํ•˜๋Š” ๊ณณ์ด๋‹ค. ๋”ฐ๋ผ์„œ ํŠน์ • ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์‘๋‹ต์„ ์ƒ์„ฑํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ทฐ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋ฐ์—๋Š” ์„ธ๊ฐ€์ง€์˜ ๋ฐฉ์‹์ด ์žˆ๊ณ , ์ด๋Š” ๊ฐ๊ฐ ํ•จ์ˆ˜๊ธฐ๋ฐ˜ ๋ทฐ, ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ๋ทฐ๋กœ ๋‚˜๋‰œ๋‹ค. #ํ•จ์ˆ˜ ๊ธฐ๋ฐ˜ ๋ทฐ from django.http import HttpResponse def my_view(request): return HttpResponse("Hello, World!") # ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ๋ทฐ from django.views import View from django.http import HttpResponse class MyView(View): def get(self, request):..
[Team 22] Django REST Framework (2) - Serializers
ยท
๐Ÿฅ”Project/Team22
DRF์—์„œ๋Š” ์ด์ „์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋˜ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ์˜ค๋Š˜์€ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €์˜ ์†Œ๊ฐœ,์‚ฌ์šฉ๋ฐฉ๋ฒ•์— ๋Œ€ํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณธ๋‹ค. ์‹œ๋ฆฌ์–ผ๋ผ์ด์ € ์†Œ๊ฐœ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋Š” DRF์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ๋‹ค. django์˜ ๋ฐ์ดํ„ฐ๋ฅผ JSONํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ด ๊ณผ์ •์„ serialization์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋ฐ˜๋Œ€๋กœ JSONํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ Python ๋ฐ์ดํ„ฐ ์œ ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญ์ง๋ ฌํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋ฅผ ํ†ตํ•ด์„œ JSON๋ฐ์ดํ„ฐ์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ํ•„๋“œ ์œ ํ˜• ๋ณ€ํ™˜๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ •์˜ํ•œ๋‹ค. ์‹œ๋ฆฌ์–ผ๋ผ์ด์ € ์‚ฌ์šฉ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋Š” rest_framework์˜ serializers.ModelSerializer๋ฅผ import ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. ModelSerializer ํด๋ž˜์Šค๋Š” ๋ชจ๋ธ๊ณผ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ € ๊ฐ„์˜ ํ•„๋“œ๋ฅผ..
[Team 22] Django REST Framework(1)
ยท
๐Ÿฅ”Project/Team22
์˜ค๋Š˜์€ django ๊ฐœ๋ฐœ์— ์‚ฌ์šฉํ•˜๋Š” django REST Framework๋ฅผ ์„ค์น˜ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์— ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ํฌ์ŠคํŒ…ํ•œ๋‹ค. Django REST Framework๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” Django ํ”„๋กœ์ ํŠธ์—์„œ RESTful aPI๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ป˜ ๋œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ƒ์„ฑ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. REST Framework ์„ค์น˜ pip ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด ์„ค์น˜ํ•œ๋‹ค. ์„ค์น˜ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ€์ƒํ™˜๊ฒฝ์„ activateํ•˜์—ฌ ์„ค์น˜ํ•˜๋„๋ก ํ•œ๋‹ค. ๋‚˜๋Š” myenv๊ฐ€์ƒํ™˜๊ฒฝ์— ์„ค์น˜ํ•˜์˜€๋‹ค. ์ด์ œ Django REST framework ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค:D ํ”„๋กœ์ ํŠธ์— REST framework ์ ์šฉํ•˜๊ธฐ ์„ค์น˜ ์™„๋ฃŒ ํ›„ Installed apps์— rest framework๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•  ..
[23-2]๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •, ๊ฐœ๋ฐœ ์„ค๊ณ„, ๊ตฌํ˜„
ยท
๐Ÿฅ”Project/Team22
์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์˜ ๊ฐœ๋ฐœ ๊ณ„ํš๊ณผ ๊ฐ„๋‹จํ•œ ์ง„์ฒ™์‚ฌํ•ญ์„ ๊ธฐ์ˆ ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๊ธฐ๋กœ ํ•œ๋‹ค. ํ”„๋กœ์ ํŠธ ์•„์ด๋””์–ด ๊ตฌ์ƒ๊ณผ ๊ฐœ๋ฐœ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•˜๋Š”๋ฐ์— ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ–ˆ๋‹ค. ๋ฉ˜ํ† ๋‹˜๊ป˜ ์กฐ์–ธ ๋“ค์€ ๋ฐ”์— ๋”ฐ๋ผ ์„ธ๋ถ€ ๊ธฐ๋Šฅ๋ณด๋‹ค๋Š” ์ฃผ์š”๊ธฐ๋Šฅ์˜ ๋™์ž‘์„ ๋ชฉํ‘œ๋กœ ์ž‘์—…ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ๋‚˜๋Š” ๊ณ„ํš ๊ด€๋ฆฌ, ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊ตฌ์ถ•, DB์™€ ๋ฐฑ์—”๋“œ ๊ตฌํ˜„, AI๋ชจ๋ธ ๊ฒฝ๋Ÿ‰ํ™” ๋ถ€๋ถ„์— ํž˜์„ ์Ÿ๊ฒŒ ๋˜์—ˆ๋‹ค. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ 1์ฐจ ์„ค๊ณ„ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ƒ์„ธ ์‚ฌ์‹ค ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊ตฌ์ถ•์— ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ–ˆ๋‹ค. ์ดˆ๊ธฐ ๊ตฌ์ƒ ํ”„๋กœ์ ํŠธ์—์„œ ์ด์ „์— ์‚ฌ์šฉํ•ด๋ณด์ง€ ์•Š์•˜๋˜ ํ”„๋ ˆ์ž„์›Œํฌ์™€, ํ™˜๊ฒฝ, ํŒŒ์ด์ฌ ๋ฒ„์ „์„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ฆ ๊ณผ์ •์—์„œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ธ๊ณ  ๋งŽ์€ ์ˆ˜์ •์ด ์žˆ์—ˆ๋‹ค. ์ „์ฒด์ ์œผ๋กœ ํ˜„์žฌ ์ƒํƒœ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค. Framework ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„ ์›Œํฌ์˜ ..