cmder에 입력하는 코드는 가상환경을 실행시킨 후 작성하는 코드임을 전제합니다.
cmder에 python manage.py startaapp 앱이름을 입력한다. 나는 blog앱과 single_page앱을 넣어주었다. 그러면 아래의 사진과 같이 앱들의 폴더가 생성된 것을 볼 수 있다.
앱 폴더의 models.py 파일에 모델을 만든다. 만약 블로그에 올릴 포스트의 현태를 정의하는 post 모델을 만들 것이라면 아래와 같이 코드를 입력한다. CharField와 DateTimeField를 이용하여 필드를 만들 수 있다.
class Post(models.Medel):
title=models.CharField()
created_at=models.DateTimeField()
프로젝트 폴더 -> settings.py 파일 -> INSTALLED_APPS[ ]리스트에 새로 만든 앱을 등록한다.
데이터베이스에 반영할 수 있게 마이그레이션을 해준다. cmder에 python manage.py makemigrations와 python manage.py migrate를 입력한다.
migrations/를 추가한다.
메인 프로젝트의 urls.py에 아래의 코드처럼 url을 추가한다.
from django.urls import path, include
urlpatterns = [
path('blog/',inlcude('blog.urls')),
path('admin/',admin.site.urls),
]
FBV : 함수에 기반을 둔 방법, 사용자가 직접 함수를 만들어서 원하는 기능을 직접 구현
from . import views #현재 폴더( . )에서 views.py를 이용
urlpatterns = [
path('',views.index), #URL이 '앱이름/'으로 끝나면 views.py에 정의되어 있는 index()함수를 실행
#index()함수는 사용자 정의 함수로 함수명이 index가 아니어도 상관X
]
def index(request):
return render(
request,
'앱이름/index.html',
)
a. 앱의 views.py에 posts 정의하기
from .models import Post # models.py에 정의 되어 있는 Post 모델을 임포트
def index(request):
posts=Post.objects.all()
return render(
request,
'앱이름/index.html',
{
'posts'=post # posts를 딕셔너리 형태로 저장
}
)
b. index.html 수정하기
<body>
{% for p in posts %}
<h3>{{ p }}</h3>
{% endfor %}
</body>
CBV : 장고가 제공하는 클래스를 활용하여 구현
FBV 작성해 둔 코드는 주석처리 되었다는 가정하에 코드를 작성했습니다.
urlpatterns = [
path('', views.PostList.as_view()),
]
from django.views.generic import ListView
class PostList(ListView):
model = Post
<body>
{% for p in post_list %}
<h3>{{ p }}</h3>
{% endfor %}
</body>
index.py 파일명을 post_list.py로 수정한다. 템플릿명을 명시하지 않으면 post_list가 post-list.py를 인식하지 못하기 때문이다.