Django์์ get() ๊ณผ filter() ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ฟผ๋ฆฌ๋ฅผ ํํฐ๋งํ๋๋ฐ ์ฌ์ฉ๋๋ค. ํ์ง๋ง ์ด ๋ ๋ฉ์๋๊ฐ์๋ ๋ช ๊ฐ์ง ์ค์ํ ์ฐจ์ด๊ฐ ์๋ค. get() method ์ด ๋ฉ์๋๋ ์กฐ๊ฑด์ ๋ง๋ ๋จ์ผ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋ ค๊ณ ํ ๋ ์ฌ์ฉ๋๋ค. ์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ฒด๊ฐ ์๊ฑฐ๋ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ DoesNotExist ๋๋ MultipleObjectsReturned ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค. get() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ฒด์ ์กด์ฌ ์ ๋ฌด๋ฅผ ํ๋จํ ๋๋ try: except ๋ฌธ์ ์ฌ์ฉํ๋ค. try: obj = MyModel.objects.get(name='example') # ์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ฒด๊ฐ ์์ except MyModel.DoesNotExist: # ์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ฒด๊ฐ ์์ excep..
Python/๐ฆ Django
DRF๋ก ์์ฑํ API์ POST Request๋ฅผ ๋ณด๋์ ์ View์ Serializer์์ ์ด๋ค ํ๋ฆ์ผ๋ก ์ฝ๋๊ฐ ํ๋ฌ๊ฐ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ฑ๋๋์ง ๋๋ฆ๋๋ก ์ ๋ฆฌํด๋ณด์๋ค. # snippets/models.py from django.db import models from pygments.lexers import get_all_lexers from pygments.styles import get_all_styles LEXERS = [item for item in get_all_lexers() if item[1]] LANGUAGE_CHOICES = sorted([(item[1][0], item[0]) for item in LEXERS]) STYLE_CHOICES = sorted([(item, item) fo..
๐์ฝ๊ธฐ ์ฌ์ด ์ฝ๋ ์์ฑํ๊ธฐ ์ถ์ฝ์ ์ด๊ฑฐ๋ ํจ์ถ์ ์ธ ๋ณ์๋ช
์ ํผํ๋ค. # bad bal_s_d # good balance_sheet_decrease ์งง๊ฒ ์์ผ๋ก์จ ๋ช ์ด ์ ๋ ํ์ ์๊ฐ์ ์๋ ์ ์์์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ๊ฒฐ๊ตญ ๊ทธ๋ฐ ๊ฒ๋ค์ ๋ช ์๊ฐ ๋๋ ๋ฉฐ์น ์ ํ๋นํ๊ฒ ๋๋ ๊ธฐ์ ์ ๋ถ์ฑ๋ก ์ฌ๋ฌ๋ถ์๊ฒ ๋ค๊ฐ์ฌ ๊ฒ์ด๋ค. ๊ทธ๋ฐ ๊ธฐ์ ์ ๋ถ์ฑ๋ฅผ ๋ฏธ๋ฆฌ ๋ง์ ์ ์๋ค๋ฉด ํ์์น๋ ๋ฐ ๋ช ์ด ์ ๋ ์๊ฐ์ ๋ ์จ์ ๋ณ์๋ช
์ ๊ธธ๊ฒ ํ์ด ์ฐ๋ ํธ์ด ์ถฉ๋ถํ ๊ฐ์น ์๋ ์ผ์ผ ๊ฒ์ด๋ค. ํจ์ ์ธ์์ ์ด๋ฆ๋ค์ ๊ผญ ์จ์ค๋ค. ํด๋์ค์ ๋ฉ์๋๋ฅผ ๋ฌธ์ํํ๋ค. ์ฝ๋์ ์ฃผ์์ ๊ผญ ๋ฌ๋๋ก ํ๋ค. ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํจ์ ๋๋ ๋ฉ์๋ ์์์ ๋ฐ๋ณต๋๋ ์ฝ๋๋ค์ ๋ฆฌํฉํฐ๋ง์ ํด๋๋ค. ํจ์์ ๋ฉ์๋๋ ๊ฐ๋ฅํ ํ ์์ ํฌ๊ธฐ๋ฅผ ์ ์งํ๋ค. ์ด๋ฆผ์ก์ ์คํฌ๋กค ์์ด ์ฝ์ ์ ์๋ ๊ธธ..
Django Management Command๋ python manage.py shell, python manage.py migrate ์ ๊ฐ์ด ์ฐ๋ฆฌ๊ฐ ์ฅ๊ณ ๋ฅผ ์ฌ์ฉํ ๋ ์์ฃผ ์ฌ์ฉํ๋ ๋ช
๋ น์ด๋ฅผ ๋งํ๋ค. ์ฐ๋ฆฌ๋ ์ด Django Command๋ฅผ Customํ์ฌ ์ํ๋ ๋์์ ์ํ๋ ๋ช
๋ น์ด๋ก ์ปค์คํ
ํ์ฌ ๋ง๋ค์ด ์ค ์ ์๋ค. custom command ๋ง๋ค๊ธฐ ์ํ๋ app ํด๋ ๋ฐ์ management ํด๋๋ฅผ ๋ง๋ค๊ณ ๊ทธ ๋ฐ์ commands ํด๋๋ฅผ ๋ง๋ ๋ค. ์ฑ์ด๋ฆ/management/commands์ด๋ฐ ๊ตฌ์กฐ๊ฐ ๋์ด์ผ ํ๋ค. ํด๋๋ฅผ ๋ง๋ค์์ผ๋ฉด commands ํด๋ ๋ฐ์ ์ํ๋ ๋ช
๋ น์ด ์ด๋ฆ์ผ๋ก ํ์ผ์ ์์ฑํ๋ค. ๋ง์ฝ python manage.py insert_data_to_db ๋ผ๋ ์ปค์คํ
command๋ฅผ ๋ง๋ค๊ณ ..
JWT๋ก ๋ก๊ทธ์์ ๊ตฌํํ๊ธฐ jwt ํ ํฐ์ผ๋ก ๋ก๊ทธ์์์ ํ ์ ์์๊น? ๊ฐ๊ณ๋ถ ์๋น์ค์์ jwt๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ ํ ํฐ์ ๋ฐ๊ธํ์๋ค. ๊ทธ๋ฐ๋ฐ jwt ํ ํฐ์ผ๋ก ๋ก๊ทธ์์์ ํ๋ ค๋ ์ด๋ป๊ฒ ํด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ์ด์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด๋ ค ํ๋ค. JWT ๋ก๊ทธ์ธ JWT ํ ํฐ์ ์๋๋ฐฉ์์ ์ด๋ ๋ค. ์ ์ ๊ฐ ๋ก๊ทธ์ธ์ ํ๋ค. db์์ ์ ์ ์ ๋ณด๋ฅผ ์กฐํํ ๋ค ์ ์ ์ ๋ณด๊ฐ ์ผ์นํ๋ฉด ๋ก๊ทธ์ธ๊ณผ ๋์์ JWT ํ ํฐ์ ๋ฐ๊ธํ๋ค. ํ ํฐ์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋ค. ํด๋ผ์ด์ธํธ์์ api ์์ฒญ์ ํ ๋ ํ ํฐ์ Authorization header์ ๋ด์์ ๋ณด๋ธ๋ค. ์๋ฒ๋ ํ ํฐ์ decodeํ์ฌ ์ ์ ์ ๋ณด๋ฅผ ํ๋ํ๋ค. db์ ํ ํฐ์์ ์ป์ ์ ์ ์ ๋ณด์ ์ผ์นํ๋ ์ ์ ๊ฐ ์์ ์ ์๋ฌ๋ฅผ ๋ฐํํ๊ณ ์ ์ ๊ฐ ์กด์ฌํ ์ api ์์ฒญ์ ์๋ต์ ๋ฐ์ ์ ์๋ค. ๊ทธ..
๐ค ORM์ ๊ฒ์ผ๋ฅด๋ค (Lazy Loading) # models.py from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() def __str__(self): return self.name class Author(models.Model): name = models.CharField(max_length=200) email = models.EmailField() def __str__(self): return self.name class Entry(models.Model): blog = models.ForeignKey(Blog, on_delete..
Django ORM์ด๋? Django ORM์ด๋ Object Relational Mapping์ ์ค์๋ง์ด๋ฉฐ ๊ฐ์ฒด(Object)์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(Relational)์ ์ฐ๊ฒฐ(Mapping) ํด์ค๋ค๋ ๋ป์ด๋ค. ์์ ๋ง๋ง ๋ค์ด์๋ Django ORM์ด๋ผ๋ ๊ฒ์ด ์ ์๋ฟ์ง ์๋๋ค. ์กฐ๊ธ ํ์ด์ ์ค๋ช
ํ๋ค๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ์ฌ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฝ์์ค๊ธฐ ์ํด์๋ ์๋ SQL ์ฟผ๋ฆฌ๋ฌธ์ ์ฌ์ฉํด์ผ ํ์๋ค. ๊ทธ๋ฐ๋ฐ Django ORM์ ์ฌ์ฉํ๋ค๋ฉด ์ฟผ๋ฆฌ๋ฌธ ์์ด ํ์ด์ฌ ์ฝ๋๋ง์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ ์ ์๋ค! ์๋ฅผ ๋ค์ด๋ณด์. from django.db import models class User(models.Model): name = models.CharField(max_length=45) email = model..