[Django파] 장고에 앱과 웹페이지 만들기

kbannie·2022년 5월 10일
0

Django파

목록 보기
5/7
post-thumbnail

🎈앱 개발하기

cmder에 입력하는 코드는 가상환경을 실행시킨 후 작성하는 코드임을 전제합니다.

1. 앱 만들기

cmder에 python manage.py startaapp 앱이름을 입력한다. 나는 blog앱과 single_page앱을 넣어주었다. 그러면 아래의 사진과 같이 앱들의 폴더가 생성된 것을 볼 수 있다.

2. 모델 만들기

(1) 모델 만들기

앱 폴더의 models.py 파일에 모델을 만든다. 만약 블로그에 올릴 포스트의 현태를 정의하는 post 모델을 만들 것이라면 아래와 같이 코드를 입력한다. CharField와 DateTimeField를 이용하여 필드를 만들 수 있다.

class Post(models.Medel):
	title=models.CharField()
    created_at=models.DateTimeField()

(2) 앱 등록하기

프로젝트 폴더 -> settings.py 파일 -> INSTALLED_APPS[ ]리스트에 새로 만든 앱을 등록한다.

(3) 데이터베이스에 모델 반영하기

데이터베이스에 반영할 수 있게 마이그레이션을 해준다. cmder에 python manage.py makemigrationspython manage.py migrate를 입력한다.

(4) .gitignore 수정하기

migrations/를 추가한다.


✨웹 페이지 만들기

1. URL 설정하기

(1) 앱 폴더에 urls.py 파일 만들기

(2) 메인 페이지에 앱 url 추가하기

메인 프로젝트의 urls.py에 아래의 코드처럼 url을 추가한다.

from django.urls import path, include

urlpatterns = [
	path('blog/',inlcude('blog.urls')),
    path('admin/',admin.site.urls),
]

2-1. FBV로 페이지 만들기

FBV : 함수에 기반을 둔 방법, 사용자가 직접 함수를 만들어서 원하는 기능을 직접 구현

(1) 앱의 urls.py에 내용 추가하기

from . import views        #현재 폴더( . )에서 views.py를 이용

urlpatterns = [
	path('',views.index),  #URL이 '앱이름/'으로 끝나면 views.py에 정의되어 있는 index()함수를 실행
                           #index()함수는 사용자 정의 함수로 함수명이 index가 아니어도 상관X 
]

(2) 앱의 views.py에 함수 정의하기

def index(request):   
	return render(
    	request,
        '앱이름/index.html',
    )
  • request 인자 : 어떠한 요청을 처리하기 위해 사용된다. render 함수를 통해 '앱이름/index.html'을 리턴
  • render 함수
    • 기본 구조 : render ( request , '불러오고 싶은 파일 명')
    • 앱 폴더> templates 폴더 > 앱 폴더 > .html을 활용해 responses를 생성하는 함수
      ex) blog/templates/blog/index.html

(3) 포스트 목록 나열하기

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를 딕셔너리 형태로 저장
        }
    )
  • Post.objects.all() : 데이터베이스에 쿼리를 날려 원하는 레코드를 가져와 저장`

b. index.html 수정하기

<body>

{% for p in posts %}
	<h3>{{ p }}</h3>
{% endfor %}

</body>
  • for문 : {% for 인자 in 딕셔너리 %} ... {% endfor %}

2-2. CBV로 페이지 만들기

CBV : 장고가 제공하는 클래스를 활용하여 구현

FBV 작성해 둔 코드는 주석처리 되었다는 가정하에 코드를 작성했습니다.

(1) 앱의 urls.py에 내용 추가하기

urlpatterns = [
	path('', views.PostList.as_view()),
]

(2) 앱의 views.py에 ListView로 포스트 목록 페이지 만들기

from django.views.generic import ListView

class PostList(ListView):
	model = Post

(3) 앱의 index.py에 list 사용하기

<body>

{% for p in post_list %}
	<h3>{{ p }}</h3>
{% endfor %}

</body>

index.py 파일명을 post_list.py로 수정한다. 템플릿명을 명시하지 않으면 post_list가 post-list.py를 인식하지 못하기 때문이다.

profile
여행하는 데이터 사이언티스트🧙‍♂️

0개의 댓글