[T26] 장고(Django) 03강_Django 프로젝트 설계
🏆 Django 프로젝트는 어떻게 설계해야하는지에 대해서 알게 된다.#in students.urls
urlpatterns = [
path('student/register/', views.regStudent),
path('search/', views.searchStudent, name='stuSearch'),
path('<str:name>detail/', views.detailStudent)
]
#in main urls
urlpatterns = [
path('student/', include('students.urls')
]
def regStudent(request):
#...
return HttpResponse()
from django.db import models
class Student(models.Model):
s_name = models.CharField(max_length=100)
s_major = models.CharField(max_length=100)
s_age = models.IntegerField(default=0)
s_grade = models.IntegerField(default=0)
s_gender = models.CharField(max_length=30)
def __str__(self):
return self.s_name
INSTALLED_APPS = [
#...
'students.apps.StudentsConfig'
]
#in apps.py
from django.apps import AppConfig
class StudentsConfig(AppConfig):
name = 'students'
#in settings.py
DEBUG = True #개발모드, False면 실제 운영모드
ALLOWED_HOSTS = [] #개발모드면 따로 정의하지 않아도 localhost,
#운영모드면 서버의 IP 주소를 입력하여야 한다.
$ python manage.py migrate
$ python manage.py makemigrations
...
$ python manage.py migrate
$ python manage.py createsuperuser
$ python manage.py runserver 0.0.0.0:8000
처음부터의 과정을 살펴보자.
Shell 모드 실행
$ python manage.py shell
>>>
레코드 추가 (Create)
>>> from students.models import Student
>>> qs = Student(s_name='HongGilDong', s_major='computer', s_age=21, s_grade=2, s_gender='M')
>>> qs.save() #DB에 반영!
레코드 읽기 (Read)
>>> qs = Student.objects.all() #QuerySet 타입으로 반환
>>> print(qs)
<QuerySet [<Student: HongGilDong>, <Student: HongGilSoon)>, <Student: HongGilJa>]>
>>> qs = Student.objects.get(s_name='HongGilDong') #Student 타입으로 반환
>>> print(qs)
HongGilDong
>>> type(qs)
<class 'students.models.Student'>
인자로 주는 filter는 속성에 __lt, __lte, __gt, __gte, __contains와 같이 붙여서 필터 조건을 단다.
>>> qs = Student.objects.filter(s_age__lt=22) #나이가 22보다 작은
>>> qs = Student.objects.filter(s_age__gte=23) #나이가 23보다 크거나 같은
인자로 주는 attribute에 속성을 넣으면 정렬 가능하다.
>>> qs = Student.objects.order_by('s_age') #나이 오름차순
>>> qs = Student.objects.order_by('-s_age') #-를 붙여 나이 내림차순
레코드 수정 (Update)
>>> qs = Student.objects.get(s_name='HongGilDong') #인스턴스 하나를 가져온 뒤
>>> qs.s_age = 20 #속성에 접근해서 수정
>>> qs.save() #수정 후 DB에 반영
레코드 삭제 (Delete)
>>> qs = Student.objects.get(s_name='HongGilDong') #인스턴스 하나를 가져온 뒤
>>> qs.delete() #인스턴스 삭제! 주의: delete() 실행 즉시 DB에서 삭제됨
#>>> qs.save() DB에 반영할 필요 없음