본문 바로가기

1.웹개발/Django

장고 게시판 작성하기(Model) CRUD - R

https://hbsowo58.tistory.com/512

 

장고 시작하기

필요한 프로그램 python git bash vscode 작업 환경(폴더) 설정 git bash 또는 vscode의 터미널 기능을 활용하여, 작업할 환경으로 이동한다 가상환경 생성 & 활성화 $ python -m venv [가상환경이름] 가상환경..

hbsowo58.tistory.com

기존글에서 이어서 진행합니다.


현재 프로젝트 구성은 다음과 같습니다.

 

프로젝트의 작업폴더

 

현재는 1개의 "프로젝트"만 존재합니다. 애플리케이션을 생성합니다 django는 애플리케이션의 모음과 같습니다.

 

게시판(들)의 뜻인 articles

 

 

articles 애플리케이션 생성후 작업폴더

명령어를 입력하면, 다음과 같이 articles 애플리케이션이 생성됩니다.

 

프로젝트에서, 애플리케이션을 사용하기 위해서는 "프로젝트"의 settings.py 파일안에, INSTALLED_APPS 안에 등록해주어야 합니다.

 

firstpjt/settings.py 47번라인 추가

 

애플리케이션을 추가하였고, 애플리케이션 내에서 작업을 할 것 이기에 urls.py도 수정합니다.

 

firstpjt/urls.py
firstpjt/urls.py

빨간색 -> 애플리케이션의 url을 include(포함)하기 위해 import 해오며, 경로를 articles에 있는 url들을 가져오겠습니다.

 


 

 

 

애플리케이션의 데이터를 요청과 응답을 보내보도록 하겠습니다.

 

 

articles/urls.py 생성

 

articles 폴더를 선택하고, [새 파일](new file) 버튼을 클릭합니다. 그 후, urls.py라는 이름의 파일을 생성합니다.

 

articles/urls.py

새로 만든 파일이기 때문에, 비어있습니다. firstpjt의 urls.py를 보면

 

firstpjt/urls.py

내용이 있는데, 복사해서 붙여넣어 줍니다.

 

articles/urls.py

 

필요한것만 남기고 모두 지웁니다.

 

articles/urls.py

기본적인 '' 아무런 url로 요청을 하지 않았을시, index 페이지를 구현하겠습니다.

 

articles/urls.py

views폴더를 import 해올 것이며, ulrpatterns 안에 '' 요청시, index를 매칭시키겠습니다.

서버가 켜져있을시 

에러메시지

위와 같은 에러가 발생하며, 이는 view 함수를 구현하면 해결됩니다.

 

현재 view함수
index 함수를 구현하였습니다.

index 함수를 구현하면 에러는 사라질 것이며, http://127.0.0.1:8000/로 접근시

 

로컬 서버 접근시

그림과 같은 에러가 발생하고, 현재 고를 수 있는 라우팅 선택지가 articles가 있습니다.

 

url에 /articles/ 입력

그림처럼 url 입력시, templateDoesNotExist 에러가 발생하고, 현재 index.html 파일이 없기 때문입니다.

 

articles 폴더에 index.html은 없다
templates 폴더생성

articles폴더안에서 [새 폴더] - [new folder]를 클릭하시고, templates라는 폴더를 생성합니다(django가 내부에 templates라는 폴더이름을 인식합니다)

 

templates/articles

templates폴더 내부에, 자식으로 articles 폴더를 다시 만듭니다.

 

templates/articles/index.html

다시 articles 폴더안에, index.html 파일을 만듭니다

index.html

렌더링을 위해 간단한 파일을 만듭니다.

 

이제 http://127.0.0.1:8000/ 로 방문하면 하단의 처럼 여전히 404가 나오지만

 

 

url에 /articles/를 추가하면,

 

hello world!

위에서 만들어둔 index.html 파일처럼 출력됩니다.

 


model을 migration 하기 위해, migration 부터 확인해보겠습니다.

 

마이그레이션 확인

상단의 명령어를 입력하면,

빨간 부분 no migrations

이전 글에서 migrate를 해두었기 때문에, 빨간색의 articles에는 migration이 되어있지 않습니다.

 

model을 작성하고 migration 하겠습니다.

 

articles/models.py

articles/models.py 파일을 보시면 비어있을텐데, 5~7번라인의 클래스를 작성해줍니다. Model로부터 models를 상속받아 CharFiled와, TextField로 title(제목) 과 content(내용)을 작성해주겠습니다.

 

두개의 차이점은 max_length 속성을 필수로 가지느냐 차이이며, max_length속성은 최대글자수를 정합니다.

(제목은 20글자 미만으로 작성하겠습니다)

 

이렇게 models.py를 작성 +저장 한후

python manage.py makemigrations

명령어를 입력하면, 하단과 같이 나올텐데

 

에러가 난경우

에러가 난 경우, makemigrations가 오타가 났다면, 하단의 장고 추천을 복사 붙여넣기 하는것을 추천드립니다.

 

articles/migrations/0001_initial.py

성공적으로 마이그레이션이 생성되었다면, migrations 폴더안에 숫자로 시작하는 파일이 생성되었을 것 입니다.

 

python manage.py showmigrations

상단의 명령어를 입력하면,

no migrations가 사라졌다

no migrations가 사라졌으며, x표가 없는 []가 출력됩니다. 마이그레이션 파일은 생성되었으나, migrate가 적용되지 않았다는 뜻입니다.

python manage.py migrate

상단의 명령어를 입력하면,

 

migrate 성공

migrate가 성공되었으며, 다시 showmigrations로 확인해보면

 

빨간색 사각형 확인

빨간 부분처럼, migrate가 되었습니다.

 

실제 DB를 확인하기위해, 확장프로그램을 설치하겠습니다

 

빨간색 부분 확인

 

빨간색 부분 (extensions = 확장) 을 클릭하시고, 

 

빨간색 사각형 -> 검색 주황색 버튼 클릭

빨간색 사각형에 SQLite라고 입력하고, 주황색 설치(install)을 클릭하면

 

설치후 변화

install이 사라졌으며

 

다시 빨간색 버튼클릭
빨간색 부분클릭

빨간색 버튼을 클릭하여 작업폴더로 돌아와서, Open Database를 클릭해보면

 

가장 하단의 빨간색 버튼 클릭

없던 SQLITE EXPLORER라는게 생성되었으며, 빨간색 버튼을 클릭해보면,

db 파일등장

db파일이 나오며, 빨간 버튼을 클릭해보면

db 파일 내용

db안에, 여러가지 테이블들이 존재하며, 빨간색으로 migrate한 articles_article 테이블이 있습니다.

주황색 버튼을 클릭해보면,

db의 필드

정의한 모델로 비교하였을때, CharField와 TextField 모두 varchar 데이터타입으로 관리되고 있으며

자동으로 integer 타입의 id가 추가되어 있습니다.

 

Article class

 

articles/views.py

현재의 상태에서, 

#articles/views.py

from django.shortcuts import render
from .models import Article
# models 파일에 있는 Article 클래스를 import 합니다

# Create your views here.
def index(request):
    articles = Article.objects.all()
    #Article 클래스의 매니저를 통해, 인스턴스를 생성후 articles라는 변수에 할당합니다.
    return render(request, 'articles/index.html')

Article 객체를 import하여, 인스턴스를 생성하고

#articles/views.py

from django.shortcuts import render
from .models import Article

# Create your views here.
def index(request):
    articles = Article.objects.all()
    context = {
        'articles' : articles
    }
    return render(request, 'articles/index.html', context)

생성한 인스턴스를 context라는 변수에 할당하여 key-value형태로 index.html template로 보냅니다.

articles/templates/articles/index.html

현재 페이지를 구현을 합니다. ! emmet 단축 명령을 통해 기본 html 파일을 생성하고,

 

! emmet 명령어

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1> 게시판 </h1>
    {% for  article in articles %}
        <div>글 번호 : {{article.pk}}</div>
        <div>글 제목 : {{article.title}}</div>
        <div>글 내용 : {{article.content}}</div>
    {% endfor %}
</body>
</html>

views.py에서 넘어오는 데이터를 반복문을 통해서 출력하겠습니다.

 

결과

http://127.0.0.1:8000/articles/에서 확인을 해보면

 

게시판 제목은 잘나오나, 저장된 데이터가 없어 조회를 할 수 없습니다.

 

다음으로 CREATE를 하여, 데이터를 추가해보도록 하겠습니다.

 

 


지금까지 진행한 파일은 하단의 링크에서 참고 하실 수 있습니다.

 

https://github.com/hbsowo58/Django/tree/master/01django_article_Read

 

GitHub - hbsowo58/Django

Contribute to hbsowo58/Django development by creating an account on GitHub.

github.com

 

반응형

'1.웹개발 > Django' 카테고리의 다른 글

장고 게시판 작성하기(Model) CRUD - C  (0) 2022.04.22
장고 시작하기  (0) 2022.04.11