본문 바로가기

1.웹개발/Django

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

https://hbsowo58.tistory.com/514

 

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

https://hbsowo58.tistory.com/512 장고 시작하기 필요한 프로그램 python git bash vscode 작업 환경(폴더) 설정 git bash 또는 vscode의 터미널 기능을 활용하여, 작업할 환경으로 이동한다 가상환경 생성 & 활..

hbsowo58.tistory.com

위 글에 이어서 작성합니다.

 

CURD의 READ 부분을 작성하였으나, 현재 데이터가 없어 조회가 어렵습니다. CREATE 기능을 구현하여

데이터를 조회해보겠습니다.

 


데이터의 흐름에따라, url -> views -> templates순으로 작성하겠습니다

 

현재 articles 애플리케이션의 urls.py는 다음과 같습니다.

 

urls.py

 

5번라인 밑에, 추가하였습니다.

articles/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('new/', views.new, name='new'),
]

에러가 발생합니다

에러 발생

articles.views에, new라는 함수가 없다는 뜻입니다. new 함수를 작성해주겠습니다.

 

현재 views.py는 다음과 같습니다.

 

views.py

index함수 하단에, new함수를 생성하겠습니다.

 

new 함수작성

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)

def new(request):
    return render(request, 'articles/new.html')

에러가 사라졌으며 http://127.0.0.1:8000/articles/new/ 경로로 접근시, 

에러 발생

TemplateDoesNotExist 에러가 발생합니다. 탬플릿이 없다는 뜻이기때문에, 탬플릿을 생성해주도록 하겠습니다.

 

new.html 추가

templates 폴더를 클릭한 후, 빨간색 버튼을 클릭하여, new.html 파일을 생성합니다.

 

index.html 파일 복사

형식을 재사용하기 위해, index.html 파일을 복사한후, new.html에 붙여넣기 합니다. body태그를 전부 제거한 후,

 

<body>
    <h1> 게시글 작성 </h1>
    <form action="#" method="GET">
        <label for="title">제목 : </label>
        <input type="text" name="title"><br/>
        <label for="content">내용 : </label>
        <textarea name="content" cols="30" rows="5"></textarea><br/>
        <input type="submit" value="게시글 작성">
    </form>
    <hr/>
</body>

 

위의 코드를 작성하면, http://127.0.0.1:8000/articles/new/ 에접근시 다음과 같은 양식이 나타납니다.

 

양식 사용

이때, 계속 주소 표시창에 url을 통해서 접근하는게 불편하므로, 라우팅 버튼을 만들도록 하겠습니다.

 

a 링크태그 추가

하단에, a태그를 추가하였으며, index로 돌아가게 라우팅을 설정해놓았습니다. 다시 요청을 보내보면

 

에러 발생

에러가 발생하며, articles라는 namespace를 발견하지 못했다고 하므로, 

urls.py

urls.py에 app_name을 추가해줍니다. 다시 새로고침하면, 에러가 사라졌으며

 

빨간 버튼 클릭

빨간버튼 클릭시,

게시판으로 이동

index.html로 이동합니다. 마찬가지로 index.html에서도 new.html로 이동하기 위해 링크를 추가해주겠습니다.

 

articles/templates/articles/index.html

index.html 파일에, 11번라인을 추가합니다.

 

링크 생성

링크가 생성되며 index.html <-> new.html간에 페이지 이동이 가능합니다.

 

지금까지는 양식만 보여주었다면, 실제로 글을 작성해보겠습니다.

 

articles/urls.py

urls.py 8번라인에 create를 추가합니다.

 

articles/views.py

views.py 가장하단에 코드를 작성한 후 , 

게시글 작성예시

다음과 같이 작성후 게시글 작성 버튼을 클릭하면

에러 발생

탬플릿이 없기때문에 에러가 발생하며, 에러 화면에서 내려보면

 

rqeuest에 대한 설명

views에서 입력받은 reqeuest 객체에 대한 정보가 확인 가능합니다.

get 요청이며 title='test' 형태로 데이터가 서버로 전송되기 때문에

 

사용 예시

사용 예시 처럼 request(요청객체)의 .GET 요청안에 있는 title Variable 데이터를 사용가능합니다.

재사용을 위해 변수에 할당하겠습니다.

 

변수에 할당

그 후 , Article Model을 활용하여, 인스턴스를 생성하겠습니다

 

Article Model 사용

Article model은 title과 content를 가지고 있으며, 이는 위에서 입력받은 변수와 매칭 시켜두었습니다.

 

이를 통해 생성된 인스턴스를 저장하겠습니다.

 

save() 메서드 사용
다시 입력

다시 입력후, 게시글 작성을 누르면, 에러는 동일하지만 좌측하단 SQLITE EXPLORER를 참고하면

 

빨간 버튼 클릭
db에 작성 성공!

db에 정상적으로 작성되었으며, 

 

http://127.0.0.1:8000/articles/

index로 돌아가면, 작성이 잘되었습니다. create.html이 없어서 아래와 같은 에러가 발생하므로

create.html이 없다
create.html 생성

create.html 파일 생성후 index.html 파일을 복사해서 붙어넣겠습니다.

index.html 복사

body 태그를 모두 삭제한 뒤, 아래와 같이 작성하겠습니다.

 

그후, 게시글을 작성해보면

 

다음과 같이 출력됩니다.

 

게시글 작성 성공!

 

게시글 작성(CREATE)를 완성하였으며, 현재 html 파일을 계속 반복하므로, 공통된 부분을 미리 만들어놓고 사용하도록 하겠습니다.

 


위의 코드는 https://github.com/hbsowo58/Django/tree/master/02django_article_Create

 

GitHub - hbsowo58/Django

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

github.com

에서 확인 하실 수 있습니다.

반응형

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

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