티스토리 뷰

반응형

CRUD 구현

Create Read Update Delete

지금부터 가장 기초적인 내용으로 사족을 빼고 지금까지 배운 지식을 이용해서 CRUD기능을 구현해 볼 것이다.

무작정 따라하면서 기본적인 흐름을 익힌 후에 디테일한 기능들을 배워보도록 하자.

 


시작 전 중요개념들 정리

흐름을 따라가다 관련 개념들 나오면 다시 올라와서 보고 가자. 이해가 안될 수도 있다. 아래에서 중요한 내용이기 때문에 이해안해도 되고 이런게 있다고 생각하고 넘어가면 된다.

 

views.py에서 return render와 return redirect의 차이점

우선은 redirect를 쓰려면 import를 해줘야한다. import django.shortcuts import render, redirect 이렇게 redirect를 추가해 주자.

redirect를 쓰면 urls.py로 돌아간다. 즉, 다시 views.py의 관련 함수로 가서 Article.objects.all()로 DB 받고 templates의 html로 가는 작업을 한다. render를 쓰면 url로 가는것이 아니라 html로 넘어가게 되기 때문에 reder이후에는 DB조작은 없다.

Q) create와 update를 합쳐서 게시글을 생성하는 것과 저장하는 것을 같이 views에 적용하면 안되나요? 안된다. 하나의 함수는 하나의 기능함 하기 떄문에 불가능하다.

 

article = Article.objects.get(id=pk)

id부분은 pk로 적어도 상관없다. 동일한 값이 저장되어있다.

pk부분은 url에서 보낸 pk와 같은 naming이어야 한다.(variable routing(고유한 글을 보기 위해서 id(Primary Key)가 필요하다.))

 

 

detail로 갈 때 f스트림 사용(python)

return redirect(f'/articles/{article.pk}/')

+ url입력시 /를 앞뒤로 꼭 적어주자.

 

 


 

 

 

0. 기본 설정을 하자. 

hanpy로 프로젝트 생성했다.

articles로 app 생성했다.

base.html을 만든 templates위치를 아래 그림으로 확인하자.

base.html은 bootstrap CDN을 포함 시키자.

위의 내용에 대해 자세히 알고 싶다면 아래의 링크를 타고 다녀오자.

han-py.tistory.com/32

 

1. django 시작하기

django 설치 핵심만 정리한다. 자세한 부분은 구글링 하자. framework이자 백엔드인 django(장고)를 배워보자. framework는 다양한 클래스와 라이브러리의 집합이다. 우리는 web framework를 직접 만들지 않고

han-py.tistory.com

 

대략적인 설명은 아래의 내용을 보면된다.

 

 


 

0.1 프로젝트 생성과 앱생성

 

프로젝트와 앱 생성

 

 

 

0.2 settings.py 설정

setting.py 설정

 

 

0.3 templates 확장/ 부트스트랩

app이 있는 위치에서 templates폴더를 만들고 그 안에 base.html을 만들자.

대략 이런식이다.

 

 

 

 

부트스트렙적용

https://getbootstrap.com/docs/4.4/getting-started/introduction/

 

Introduction

Get started with Bootstrap, the world’s most popular framework for building responsive, mobile-first sites, with BootstrapCDN and a template starter page.

getbootstrap.com

CDN은 위의 페이지에 들어가서 붙여넣으면 된다.

 

 

 

우리가 현재 만든 templates는 설정을 바꿔주지 않으면 장고엔진에서 찾을 수 없다.

따라서 아래와 같이 설정값을 지정해 준다.

 

 

TEMPLATES 갑의 DIRS를 위와 같이 바꿔준다.

'DIRS': [os.path.join(BASE_DIR, 'templates')],

여기서 BASE_DIR은 내가 만든 프로젝트(상위 hanpy)라고 생각하면된다.

즉, 장고 탬플릿 엔진에게 'hanpy프로젝트 폴더 안에 있는 templates에서 찾아라!'라는 명령을 주는거다.

 

 

 

 


 

1. urls 분리

CRUD 코드 구현 전에 기본적으로 환경설정부터 완료하자.

관련 내용은 아래의 링크를 타면 된다.

han-py.tistory.com/83

 

[Django]urls 분리

편의성을 위해 app당 url을 따로 만들어서 관리를 할 예정이다. app 이 여러개이 경우에 urls.py를 필수적으로 분리하여 관리하자. ex) 게시판을 만들려면, 회원계정을 관리하는 app과 게시글을 관리하

han-py.tistory.com

 

 이전에 배운 것 처럼 프로젝트 url을 app url로 분리해보자.

기존의 app의 urls에 위와 같이 적자.

path 부분을 해석하면, 인터넷 주소 뒷 부분에 articles/가 있으면 articles안에 있는 urls에 가서 코드 읽으라는 말이다.

그런데 articles app 안에 urls 없다. urls.py 만들자.

 

 

urls 만들고 위와 같이 친다. urlpatterns 안의 값이 비어있어도 반드시 유지시켜 놔야한다.

 

 

 


 

 

models 생성

models.py는 DB 저장한다 생각하면 된다.

title, content, created_at, updated_at는 DB가 표라면 가장 윗줄이라고 생각하면 된다.

Article은 models의 Model을 상속받아 생성한다.

auto_now_add는 자동으로 생성 시간 추가 된다.

즉, DB에 저장되는 시점에 알아서 장고에서 저장해서 created_at에 넣어준다.

auto_add은 데이터가 수정되었을 때 저장되는 옵션이다.

 

DB설계도 만들었으니 이제 DB에 적용하자.

 

makemigrations하고 migrate 하면 okokokok 뜨면서 DB 생성 한다.

 

python manage.py showmigrations

를 치면 아래처럼 적용된 것들은 X표가 처지는 것을 알 수 있다.

이런식으로 나온다면 성공!

 

 

 

 


2. Read 구현 (게시판) 

2.1 index.html 만드는 MTV

우리는 지금까지 기본 게시판인 index.html 을 만들기 위해 기본설정 후에 url을 나누고 bootstrap 설정하고 models 설정까지 했다.

DB 생성을 완료 했으니 index.html 만들자

 

 

페이지를 만들려면 urls views templates 순서로 만들면 된다.

 

 

 

2.2 urls.py

app 안에서 우리가 새로 만든 urls다!

path에 빈칸 ' '을 적은 이유는 받아온 주소인 articles를 유지한다는 말이다.  

 ex) www.hanpy.com/articles/

그리고 views.index는 views안에 index를 찾아가서 보라는 이야기다.

이때 views를 불러와야 볼 수 있으므로 import에 views를 넣은거다.

이때 from의 .은 현재위치와 같은 곳에 있단는 말이다.

 

 

2.3 views.py

위에서 views.index로 views의 index를 보라고 했으니

index를 views에 만들어야한다.

이 때 'articles/index.html'은 내가 views를 적은 후 에 만들 index.html 위치를 미리 적은거다.

이제 index.html만들러 가보자.

 

 

2.4 index.html

아래의 파일구조를 잘보자.

articles 라는 app 안에 templates를 만들고 그안에 articles라는 파일을 하나 더 만들어서 그안에 index.html을 넣었다.

기존에 하는 방식이라고 생각하면된다. 

이런식으로 만들었다.

일단 이정도 적어 놓고 되나안되나 확인하자.

 

디테일한 READ에 대한 정보는 아래의 url을 참고하자.

han-py.tistory.com/96

 

[Django] CRUD_READ_목록페이지 구현

목록페이지 만들기. 세부사항은 세부사항 READ는 다른 게시판 즉, 게시판을 만들거다. 기초만 적용 urls.py from . import views path('', views.index) views.py from .models import Article def index(reque..

han-py.tistory.com

 

 

 

3. create 만들기

입력할 수 있는 form이 필요하고 입력 받은 것들을 DB에 저장 할 수 있게 만들자.

new.html을 만들거다.

 

3.1 urls.py

일단 urls부터 만들자.

 

 

3.2 views.py

 

 

3.3 new.html

textarea 치고 탭 누르면 자동완성 된다. 그리고 clos와 rows는 서버 보면서 크기를 변경해준다.

 

 

 

 

 

 

 

중간 점검

위의 화면이 뜨면 성공.

 

 

 

 


4. create로 url 연결

게시글을 작성할 수 있는 길을 만들어보자.

index.html에서 new를 누르면 articles/new로 움직이게 하자.

new.html에서 send를 누르면 create로 시키자.. 그러면 이제 우리는 create를 만들러 가보자

 

 

index.html 에서 길 추가

 

 

 

new.html에서 길 추가

 

 

create만들러 가보자.

urls

 

 

views

여기서는 정리할 것이 많다. 

 

인덱스는 그냥 articles라고 입력해준다.

리다이렉트는 템플릿 경로를 입력해주는게 아니라 url경로를 입력해준다.

글 작성하면 그리러 간다.

title = request.GET.get('title')  - title이라는 값을 받아올건데 request안에 있는 GET 안에서 딕셔너리 형태로 담겨있을 거다. 따라서 딕셔너리 함수인 get을 써서 'title'을 title에 저장한다.

DB에 저장을 해야하는데, 우리는 클래스를 Article이라고 models에서 정의했다. Article()

이때, Article을 쓰려면 import를 해야한다. form .models import Article 

저장하는 방법은 앞에서 배운 세가지가 있다.

1.
article = Article()
article.title = title
2.
article = Article(title=title, content=content)

DB에 최종적으로 저장을 하려면 article.save()를 해주면 된다. 저장이 끝나면 /articles/라는 메인페이지로 갈꺼다.

 

 

 

 

 

 

서버 켜서 되나보자.

/articles/ 들어가서 new 눌러봐. 

글쓰는 창 나오고, 글쓰고 send 누르면 /articles/에서 돌아온다.


index.html에서 저장되는 글 목록 보여주기

메인페이지 꾸미기

index.html 에서 저장된 글들을 목록에서 보여주게 한다.

DB값을 불러와야하니 views에서 index.html 변경하자.

articles = Article.objects.all()
model의 Article의 모든 값을 다 가져와서 articles라는 변수 에 넣는거다.
DB를 받아 왔으니 이제 index.html에가 보이게 만들자.

 

 

index.html

수정하자.

 

 

 

detail 부분 만들자.

url - view - html

urls.py

views

여기 article은 s가 없다.

 

 

 

detail.html

#으로 경로 안적은건 만든 다음에 다시 와서 적어준다.

 

 

index.html에 경로 넣자!

 

 

 

DELETE 작성하자

url

 

 

views 추가

delete는 간단하다. 그냥 불러와서 삭제하면 된다.

 

 

 

detail.html에서 경로 추가하자.

 

 

update 

글생성이랑 비슷하지만 수정한 파일을 기반으로 DB에 저장한다.

urls 부터

 

views

 

detail.html 경로 수정

 

edit.html

 

update없으니 url 부터 다시 만들자.

 

 

views

수정할 값을 가지고 와서 인스턴스로 만들고

수정된 값을 받아와서

인스턴스에다가 넣어주고

저장하면 된다.
저장 했으면 redirect로 상세페이지로 이동하게 한다...

 

 

 


위에서 한 것이 CRUD의 기본이다. 앞으로 우리는 최적화와 보안을 위해 위의 기본을 바탕으로 추가해 나갈 것이다.

1. get, post method를 추가할 것이다.

2. 404에러가 뜨도록 유도할 것이다.

3. bootstrap4를 적용할 것이다.

4. 로그인 한 이용사만 사용가능하도록 user를 추가할 것이다.

5. 비슷한 부분이 많은 create와 update의 html부분의 합칠 것이다.

6. model 부분에서 N:M과 1:N 관계를 추가할 것이다.

7. 댓글 부분을 구현 할 것이다.

8. 좋아요 기능을 구현할 것이다.

반응형

'Web > Django' 카테고리의 다른 글

[Django] bootstrap  (0) 2020.07.06
[Django] 정적파일(STATIC_JavaScript, CSS, IMAGE) 넣기+ImageField(pillow, imagekit)  (0) 2020.07.02
[Django] Model 기초  (0) 2020.06.28
[Django] Migration  (0) 2020.06.26
[Django] ORM  (0) 2020.06.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함