Skip to main content

πŸ“š Django 5의 λŒ€λž΅μ μΈ λͺ¨λ“ κ²ƒ

DjangoλŠ” λˆ„κ°€ λ§Œλ“€μ—ˆλ‚˜?​

DjangoλŠ” λΉ λ₯΄κ²Œ λ³€ν™”ν•˜λŠ” λ‰΄μŠ€λ£Έ ν™˜κ²½μ—μ„œ κ°œλ°œλ˜μ—ˆκΈ° λ•Œλ¬Έμ— 일반적인 μ›Ή 개발 μž‘μ—…μ„ λΉ λ₯΄κ³  μ‰½κ²Œ μˆ˜ν–‰ν•  수 μžˆλ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€

Django λͺ¨λΈ 섀계​

Django λͺ¨λΈ κ°„λ‹¨ν•œ μ˜ˆμ‹œβ€‹

from django.db import models

class Reporter(models.Model):
full_name = models.CharField(max_length=70)

def __str__(self):
return self.full_name


class Article(models.Model):
pub_date = models.DateField()
headline = models.CharField(max_length=200)
content = models.TextField()
reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)

def __str__(self):
return self.headline

Django의 핡심 Django shell​

Django shell은 Django ν”„λ‘œμ νŠΈμ—μ„œ λͺ¨λΈμ„ μ‰½κ²Œ μ‘°μž‘ν•  수 μžˆλŠ” νŽΈλ¦¬ν•œ λ„κ΅¬μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 λͺ¨λΈμ„ μ‰½κ²Œ μ‘°νšŒν•˜κ³  μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

python manage.py shell

# Import the models we created from our "news" app
>>> from news.models import Article, Reporter

# No reporters are in the system yet.
>>> Reporter.objects.all()
<QuerySet []>

μ‹€μ œλ‘œ λͺ¨λΈμ„ μ„€κ³„ν•˜κ³  μž„ν¬νŠΈν•΄μ„œ ν…ŒμŠ€νŠΈ ν•΄λ³Ό λ•Œλ„ μ‚¬μš©λ˜κ³  λ””κ±°λΉ™μ΄λ‚˜ κΈ΄κΈ‰ μˆ˜μ •μ—μ„œλ„ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • Django μ—μ„œ 슀크립트λ₯Ό μ‹€ν–‰ν•  수 μžˆλŠ”λ°
# my_script.py 파일 μž‘μ„±
# my_script.py
from myapp.models import MyModel
from django.utils import timezone

print("Updating status for objects created before today...")
count = MyModel.objects.filter(created_at__lt=timezone.now().date()).update(status='archived')
print(f"{count} objects updated.")

python manage.py shell < my_script.py

μ΄λ ‡κ²Œ ν•˜λ©΄ 슀크립트 λ‚΄μš©μ΄ Django ν™˜κ²½μ—μ„œ 순차적으둜 싀행됨

Djangoμ—μ„œ settings.py νŒŒμΌμ„ μ—¬λŸ¬ ν™˜κ²½(개발, 운영 λ“±)으둜 λ‚˜λˆ„μ–΄ 관리할 λ•Œ, python manage.py shell λͺ…λ Ήμ–΄κ°€ μ–΄λ–€ μ„€μ • νŒŒμΌμ„ λ‘œλ“œν• μ§€λŠ” DJANGO_SETTINGS_MODULE ν™˜κ²½ λ³€μˆ˜μ— μ˜ν•΄ κ²°μ •

예λ₯Όλ“€μ–΄ 파일 ꡬ쑰가 μ•„λž˜μ™€ κ°™λ‹€λ©΄?

myproject/
β”œβ”€β”€ manage.py
└── myproject/
β”œβ”€β”€ __init__.py
β”œβ”€β”€ settings/
β”‚ β”œβ”€β”€ __init__.py # 이 νŒŒμΌμ€ λΉ„μ–΄μžˆκ±°λ‚˜ κΈ°λ³Έ 섀정을 μž„ν¬νŠΈ
β”‚ β”œβ”€β”€ base.py # 곡톡 κΈ°λ³Έ μ„€μ •
β”‚ β”œβ”€β”€ development.py # 개발 ν™˜κ²½ μ„€μ • (base.py μž„ν¬νŠΈ 및 μž¬μ •μ˜)
β”‚ └── production.py # 운영 ν™˜κ²½ μ„€μ • (base.py μž„ν¬νŠΈ 및 μž¬μ •μ˜)
β”œβ”€β”€ urls.py
└── wsgi.py

이 νŒŒμΌλ“€μ΄ κΈ°λ³Έ settings.pyλ‚˜ base.pyλ₯Ό μƒμ†λ°›λŠ” ꡬ쑰라면,

Shell을 μ‹€ν–‰ν•  λ•Œ λͺ…μ‹œμ μœΌλ‘œ DJANGO_SETTINGS_MODULE ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•΄μ£Όμ–΄μ•Ό ν•΄λ‹Ή ν™˜κ²½μ˜ 섀정이 적용

URL μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆβ€‹

DjangoλŠ” μ•„λ¦„λ‹€μš΄ URL 섀계λ₯Ό μž₯λ €ν•˜λ©° URL에 .php λ‚˜ .asp 같은 λΆˆν•„μš”ν•œ λ‚΄μš©λ“€μ„ λ„£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. (JAVA 곡화ꡭ인 λŒ€ν•œλ―Όκ΅­μ—μ„œλŠ” .do 와 같은 것듀을 자주 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€)