우리는 앞으로 세션때 sns를 제작해볼 겁니다. sns를 제작하는 프로젝트가 주어졌을 때 예상되는 기능들이 있겠죠?
1. 회원가입/로그인
2. 메인 화면(다양한 게시물을 볼 수 있는)
3. 게시글 작성
4. 자신의 피드(게시글) 관리(수정,삭제)
이러한 기능들 하나하나가 App이 되어 프로젝트를 구성할 것입니다. 그리고 우리가 만든 main 앱은 두번째의 메인 화면을 개발할 앱이 되겠습니다.
migrations : 데이터베이스를 업데이트해주는 파일을 저장해주는 폴더__init__.py : 빈 파일admin.py : 관리자 사이트와 관련된 설정apps.py : 앱에 대한 기본정보models.py : model에 대한 정보test.py : test case에 대한 정보views.py : 앱에 대한 views를 관리하는 파일 => 이번 세션에서 다뤄봅니다!main 앱 안에 templates 폴더를 생성합니다.
생성한 templates 폴더 안에 main폴더 (앱 이름과 동일한 폴더)를 생성합니다.
앱이름과 동일한 폴더안에 mainpage.html를 생성합니다.
💡 앱 이름과 동일한 폴더를 만드는 이유
만약 다른 앱에 똑같은 이름의 다른 html이 있다면 다른 html을 가져올 수도 있기 때문입니다. 뒤쪽에 views.py에서 보면 더 이해가 쉬울 겁니다. 뒤쪽에서 다시 설명드릴게요.
mainpage.html에 간단하게 코드 한 줄을 작성합니다.
<h1>2021 Dongguk Likelion 9th SNS</h1>
mainpage.html을 작성했지만 서버를 실행하면 메인화면이 나오지 않습니다. html파일을 url을 통해 연결해주어야 html파일을 가져와 띄워줍니다. url을 통해 연결할 때 view를 만들어 경로에 할당해주어야 합니다.
from django.shortcuts import render # django.shorcuts패키지에있는 render라는 함수를 사용
def showmain(request):
return render(request, 'main/mainpage.html')
# def 함수이름(인자):
# 함수를 호출했을 때 실행될 코드
✏️ request는 항상 적어주는 것이라고 생각해주세요. request가 templates의 main폴더 안에 있는 mainpage.html을 요청하고, render가 templte(mainpage.html)을 전송한다고 생각하면 이해하기 쉽습니다.
💡 왜 main/templates/main/mainpage.html이 아니라 main/mainpage.html인가요?
settings.py에는 templates설정이 되어있습니다. INSTALLED_APPS에 등록한 앱의 templates 폴더를 찾습니다. 그리고 이름이 일치하는 파일을 찾습니다. 이런 방식으로 동작하기 때문에 Django 에서 이 template 을 단순히 main/mainpage.html로 참조할 수 있습니다
💡 앱 이름과 동일한 폴더를 만드는 이유
만약 우리가 main폴더를 만들지 않고 templates폴더에 바로 mainpage.html을 만들었을 경우
def showmain(request):
return render(request, 'mainpage.html')
이렇게 작성해야할 것입니다. 하지만 django는 INSTALLED_APPS에 등록된 앱의 templates 폴더를 탐색하다가 이름이 일치하는 첫번째 template 을 선택합니다. 그렇다면 만약 우리가 sns프로젝트를 만들다가 마이페이지 기능을 추가했고, mypage앱의 templates폴더안에 mainpage.html이 있다면 django는 main앱의 mainpage.html을 불러와야하는 mypage mainpage.html을 불러와야하는지 정확히 알아내지 못할 수 있습니다. 따라서 templates폴더 안에 앱 이름과 동일한 폴더를 만들어주는 것입니다.
html 파일도 작성했고, views.py에서 html 파일을 띄워주는 코드를 작성했습니다. 이제 url에서 경로를 지정해 어떤 경로에 접속했을 때 해당 html파일을 띄워줄지 연결해주면 됩니다.
from django.contrib import admin
from django.urls import path
from main import views # main앱의 views함수를 사용하기 위해 불러옵니다.
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.showmain), # 아무것도 입력안한 경로에 main앱의 views.py의 showmain함수를 연결합니다.
]
함수 불러오기
from main import views
main앱의 views함수를 사용하기 위해 불러옵니다.
경로 추가하기
path('경로', 해당하는 view),
앞에 적은 경로로 접속했을 때 뒤에 적은 함수를 연결합니다. 여기도 마찬가지로 ,적어주는 것 잊지마세요!
path('', views.showmain)
''는 아무것도 입력안했을 때를 말합니다. 즉, 제일 처음 뜨는 화면이겠죠. 해당 경로일 때 views.showmain은 위에서 import한 main앱의 showmain함수로 연결합니다. showmain함수는 아까 main앱의 mainpage.html을 render해주므로 mainpage.html을 띄우게 됩니다.
$ python manage.py runserver
$ git add.
$ git commit -m "mainpage 띄우기"
$ git push origin main
http://127.0.0.1:8000/입니다. 겨올에 아무것도 입력하지 않았습니다.path('', views.showmain) 그렇다면 views함수들 중 showmain이라는 함수로 갑니다.from main import views views는 main앱의 views.py에 있는 함수군요.
def showmain(request):
return render(request, 'main/mainpage.html')
showmain이라는 함수는 main앱의 templates폴더안의 main폴더안의 mainpage.html을 전송해주는 함수네요.
<h1>2021 Dongguk Likelion 9th SNS</h1>
이 내용이 화면에 보이겠네요!