본문 바로가기
Web/Django

[Django] 게시판 만들어보기 - Part 1 (글 작성 페이지 만들기)

by char_lie 2023. 3. 21.
반응형
반응형

Django를 이용하여 게시판을 만드는 과정을 따라가보자.

먼저 CRUD의 C를 한번 진행해보려고한다.

https://edder773.tistory.com/89

 

[Django] 기초 무작정 시작하기 - Part 2

https://edder773.tistory.com/88 [Django] 기초 무작정 시작하기 - Part 1 Django 기초부터 무작정 시작하기 Django를 하면서 처음 사용하는 것부터 시작해서 하나씩 개념 정리하기 위해 작성하는 포스팅 1. Django

edder773.tistory.com

기본 베이스는 내가쓴 기초 무작정 시작하기 글의 Part 2 완성본에서 이어진다. (번외까지 적용된 형태에서 시작)

참고로 작성할 때 서버가 동작중이라면 Ctrl + C를 통해 서버 동작을 멈출 수 있으니 참고하자


데이터의 전달 방식 (Client)

HTML의 <form> 요소를 사용할것이고, 데이터를 어디로 어떻 보낼지에 대한 기준을 정의

가장 핵심이 되는 속성은 action / method 

  • action : 입력 데이터가 전송될 URL을 지정하는 것으로 반드시 유효한 URL이 존재해야함, 지정하지 않을 경우 현재 form이 있는 페이지의 URL로 보내짐
  • method : 데이터를 어떻게 보낼 것인지에 대해 정의, HTML form 데이터는 GET과 POST 방식만 존재
  • GET : 서버로부터 정보를 조회하는 데 사용하고 데이터를 가져올 때만 사용해야 함. 기본적으로 method를 정의하지 않을 경우 GET을 기본값을 갖는 특징을 갖고 있음. 데이터를 서버로 전송할 때 Query String Parameters를 통해 전송되는 특징이 있음
  • POST : 사용자가 서버에게 데이터를 받아 전달하는데 사용함, method로 정의해줘서 사용할 수 있음.

 

데이터의 전달 방식 (Server)

  • 서버는 데이터를 클라이언트로부터 받아서 처리
  • 우리가 작성한 view 함수에서 해당 데이터에서 접근하기 위해서 view 함수의 첫번째 인자인 request를 통해 데이터를 전달 받음

 

Django Model

  • django는 model을 통해 데이터에 접근하고 조작하는 특징을 갖고 있음
  • 모델 클래스를 작성하는 것은 데이터베이스 테이블의 스키마를 정의하는 것
  • 클래스 상속 기반 형태의 django 프레임워크 개발로 데이터베이스 테이블을 구성하여 이것으로부터 값을 받아서 사용함.

실제 적용해보기

우리는 이제 처음 제작한 index에 표를 작성하여 삽입하고 출력하는 과정을 진행하기 위해서 위에서 언급한 Model을 사용해야하므로 models.py에서 다음과 같이 파일을 작성해준다.

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=10)
    content = models.TextField()

title과 content은 변수명이고, 각각의 데이터 유형을 CharField(), TextField() 모델 필드 형식으로 저장하기 위해 정의해준다. 여기서 만들은 모델을 실제 데이터 베이스에 반영하기 위해 아래와 같은 명령어를 터미널에 입력해주자

★★★ 모델이 수정될 때 마다 꼭 해줘야한다 ★★★

python manage.py makemigrations # 변경사항에 대한 도면 제작
python manage.py migrate # 만든 도면을 실제 데이터베이스에 반영해주기

자 여기까지 완성했으면, 이제 우리는 title과 content를 데이터베이스를 통해서 입력받을 수 있게 됐다!

이 다음부터는 데이터베이스를 이용하여 값을 index.html을 통해 출력해보자


우리가 진행할 것은 Create(생성) 이므로, 무작정따라하기 part2에서 했던 것을 한번 더 진행한다.

먼저 urls.py에서 create의 urls를 만들어주자.

create의 urls를 만들면서 앱의 이름도 따로 정의해줬다. app_name 변수를 통해 앱 이름도 지정이 가능하고, 나는 혼동을 방지하기 위해서 articles로 지어줬다.

urls.py에서 create를 만들어줬으니, 똑같이 view에서도 create를 정의해줘야 사용할 수 있으니, create를 정의해주자.

create를 만들면서 models에서 정의한 Articles를 가져와서 사용하기 위해 import 해주었고, Articles에 해당하는 데이터베이스의 모든 값을 반영하는 Articles.objects.all()를 사용해서 article에 할당 후, 딕셔너리 형태로 해서 값을 render할 수 있게 구성해주었다.

중요한 점이 Create가 조금 긴데, 우리는 사용자에게 데이터를 입력받고(POST) → 데이터베이스로 구성해서 → index.html에서 출력의 형식으로 만들어줘야한다. 그렇기에 method가 POST일때, title과 content를 받아 저장하는 형태로 구성하여 redirect를 이용해 return 해주었다.

여기까지 했으면 이제 추가로 create를 위한 create.html 파일을 만들어주자.

여기서 우리는 글을 작성해주기 위해서 사용자에게 title과 content를 입력받아 저장해서 index.html로 넘겨줄 것이니 create.html을 작성후 index.html도 수정해주자.

여기서 form 요소를 쓸때 주의해야할게 csrf 토큰을 꼭 지정해줘야한다. 지정해주지 않으면 에러로 작동하지 않으니 주의하자. 그리고 index.html도 다음과 같이 수정해주자.

for문을 활용하여 articles에 있는 인자들을 받을 수있도록 구성해주었다.

이제 여기서 우리는 이 create.html에 접근해주기 위한 url을 아직 구성해주지 않았는데, 이걸 위해 이전번외에서 작성한 _navbar.html에 create.html에 접근 할 수 있게 다음과 같이 url을 넣어주었다.

또한, 메인 버튼을 누르면 index로 갈 수 있게 메인의 a 태그에도 index의 url을 넣어주자

여기까지 작성을 완료했으면 파일전부 저장하고 runserver을 통해 서버를 동작해보자.

아래와 같이 동작하고, 글 쓰기 버튼을 누르면

글 작성 페이지로 잘 넘어감을 확인 할 수 있다. 여기까지 작성을 잘 따라와서 완료했다면, 제목과 내용을 입력하면, 메인 화면에 잘 반영돼서 출력하는 것을 볼 수 있다.

여기까지가 CRUD의 C에 해당하는 부분이다. Create를 위해 데이터베이스를 구성 후 사용자에게 입력 받아 저장 후 출력하는 형식으로 만들어주는 과정이 어려울 수 있지만, 한두번 해보면 어떤 구성인지 쉽게 이해할 수 있다.

 

다음 Part2는 CRUD의 R(읽기)로 이어질 예정이다.

반응형

댓글