SlideShare a Scribd company logo
1 of 44
CRUD
E U N J U N G L E E
D U K S U N G W O M E N ’ S
오늘의 할일 미리보기
2
*새로운 글을 만들고 마음껏 수정, 삭제도 해 보세요!
https://limitless-earth-99193.herokuapp.com/
*모바일 접속 가능
오늘 할일: CRUD 기능을 통해 블로그 만들기
 지난시간 복습 (model 생성,
 static, templates 자원 한곳에서 관리하기
 CRUD 개념 학습
• CRUD란 무엇인가?
• CRUD action이 DB에 어떤 영향을 끼치는가?
• http methods : get vs. post 방식의 쓰임과 차이점
 CRUD 기능 실제로 구현하기
• forms.py를 이용해 사용자로부터 데이터 직접 입력받기
• pk(primary key)의 개념, 깜짝퀴즈
3
여기는 혼자 해보세요!
1. 바탕화면에 빈 폴더(binfolder)를 만들고
2. 그 안에 가상환경(myvenv)를 생성한 뒤
3. 가상환경 활성화  Django 설치
4. ‘blogprj’ 프로젝트 생성하기
5. ‘blog’ 앱 생성하기
6. settings.py에 앱 등록하기
7. runserver !
4
cheatsheet
5
model 생성 && migrate
6
models.py
admin에 등록하기
7
models.py에서 작성한
Post를 등록해주세요.
blog > admin.py
superuser 생성하기
8
$ python manage.py createsuperuser
127.0.0.1:8000/admin
방금 생성한 superuser 계정으로 로그인 합니다.
앞서 admin에 등록한 model Post가 보이네요.
Post object 생성하기
9
게시물을 3개 생성해 주세요
목록으로 가면
생성한 게시물들이 보입니다.
MTV pattern
10
사용자가 직접 Model object 생성, 수정, 삭제, 조회
복습 끗.
새로운 내용 시작!
11
the acronym CRUD
• Create – create or add new entries in a table in the database.
• Read/Retrieve – read, retrieve, search, or view existing entries as a
list(List View) or retrieve a particular entry in detail (Detail View)
• Update – update or edit existing entries in a table in the database
• Delete – delete, deactivate, or remove existing entries in a table in the
database
12
CRUD action action
CREATE 생성 새로운 데이터 추가
READ 읽어오기 이미 존재하는 데이터 불러오기 (DB 변화 X)
UPDATE 수정/갱신하기 이미 존재하는 데이터 수정하기
DELETE 삭제하기 이미 존재하는 데이터 삭제하기
https://youtu.be/2S6H6URQiY8
“ 데이터(models.py)를 처리하는 기본적인 네가지 방식 ”
static, templates 한곳으로 정리하기 (1)
13
BASE_DIR
(blogprojectmom)
TEMPLATES, STATIC 폴더 생
성
지난 시간에는 각각의 app 내에 static, templates 폴더를 만들었
습니다.
이제부터는 프로젝트 최상단에서 관리해 주겠습니다.
static, templates 한곳으로 정리하기 (2)
14
TEMPLATES = [ ]
이 부분을 추가해 주세요.
같은 파일의 맨 끝에 왼
쪽 코드를 추가해 주세요.
BASE_DIR에 있는 ‘templates’와
‘static’ 폴더에 자원이 들어있다.
이제부턴 여기에 적어준 경로에서 자
원을 불러옵니다.
setting.py
# STATIC_ROOT = ‘/static/’
오늘 할 코딩의 overview
15
왜 delete 기능에만 template이 없나요?
url은 view에 있는 함수를 실행하는 역할입니다. (url 자체가 html을 불러오는게 아님)
따라서 url과 template은 1:1 관계가 아님!
urls.py views.py templates (.html)
‘’ def main posts.html
‘detail/게시물번호/’ def detail detail.html
‘create/’ def create create.html
‘update/’ def update update.html
‘delete/’ def delete 없음
templates 생성
16
templates > create.html, detail.html, posts.html, update.html 생성
자동완성으로
뼈대만 만들어 주세요.
template이 없으면 urls,
views 작성할때 오류가
나서 미리 만들어 둡니다.
목록보기 views/urls 생성
17
views.py
urls.py
함수는 return
render(request, template, context)
형식으로 작성합니다.
template에서 호출할 내용들을 context 부
분의 dictionary 안에 밝혀주세요.
목록보기 template 만들기
18
templates > posts.html
posts.all =
Post.objects.all
for문을 써서 Post
객체들 전체를 순
회합니다.
사용자가 데이터 직접 등록 - forms.py 생성
19
blog > forms.py
ModelForm 사용
Model Post의 fields
중에서
사용자가 직접 데이터
를 입력, 전송하는
fields를 밝혀줍니다.
create.html 만들기
20
templates > create.html
{% csrf_token %}
Django에서 POST 방식
으로 데이터를 전송할때
기본으로 제공하는 보안
수단
{{ form.as_p }}
p태그를 사용해서 form
생성하기
{{ form.as_table }}
{{ form.as_ul }}
GET vs. POST (1)
21
GET
POST
GET POST
action 데이터 읽어오기 새로운 데이터 생성 또는 수정
데이터 영향
데이터에 영향 없음, 단순 불러오
기
데이터 변화 O, 새로운 데이터 생성
url url(주소창)에 데이터 딸려나옴 url에 아무것도 보이지 않음
보안
보안에 취약
(url에 보임, caching됨)
get에 비해 괜찮음
(브라우저에 데이터 저장되지 않음)
default
method
O
기본 http 요청 방식, 따로 밝히지
않으면 항상 get 방식 요청
X
반드시 post라고 밝혀줘야 함.
클라이언트 웹 서버
GET vs. POST (2)
22
자유게시판에 새로운 글 등록하기
GET
POST
역대총장 소개글 메뉴
create 함수 작성
23
views.py
If:
사용자가 POST 방식으로
request 요청을 보내면
(submit 버튼을 누르면)
 유효성 검증을 한 뒤, 내용
을 저장하고 main 페이지로
돌아가기
else:
POST 방식이 아니면 (새글쓰
기 페이지를 처음 열었으면)
 PostForm을 열어줘라
# import redirect
form 변수에 PostForm 할당
create url 작성
24
urls.py
확인해보기
25
등록하기 버튼 클릭  새 글이 등록되고 main 페이지로 이동합니
detail view/url 작성
26
views.py
urls.py
Import
get_object_or_40
4
특정 게시물 지정을 위
해 pk값을 꼭 밝혀주세
요.
pk로 pk 사용
Primary Key
27
“그렇다면 PK가 될 수 있는 field와
그렇지 못한 field는?”
덕성멋사 회원 DB: [id, 역할, 이름, 학번, 학과/학부, 전화번호, 이메일 ]
pk(primary key)란?
: 기본키, 각각의 데이터 객체(object)를 구분할
수 있게 하는 유일하고 중복되지 않는(unique)
값
a.k.a 데이터의 주민등록번호
참고: Django에서 model을 통해 DB를 생성할 때는 pk를 자동 생
성해 줍니다. 따라서 id필드를 따로 만들지 않아도 됩니다.
과제
detail.html 만들기
28
templates > detail.html
확인하기
29
update.html 만들기
30
templates > update.html
create.html의 내용과 똑같
습니다.
views.py의 함수를 살펴보면
Post가 생성될때 저장된 데
이터를 받아온다는 점만 다릅
니다.
update views/urls 작성
31
views.py
urls.py
해당 post의 pk도 같
이 넘겨줍니다.
해당 post 객체에
이미 저장된 내용을 불
러옵니다.
나머지는 create 함수와
똑같습니다.
delete views/urls 작성
32
views.py
urls.py
삭제 작업은 특정 게시물 1개만을
대상으로 실행됩니다.
따라서 pk값도 같이 인자로 넘겨줍
니다.
마찬가지로 url에도 pk값을
꼭 적어주세요.
삭제하기 버튼 만들기
33
templates > detail.html
해당(특정) 게시물을 찾기 위해서는 delete함수를 호출하는 url에 pk값도 꼭 넣어줘야 합니다.
location.href라는 정체불명의 코드는 나중에 javascript에서 배웁니다. 지금은 그냥 따라 쓰
삭제기능 테스트하기
34
삭제하기 버튼을 누르면 게시물이 삭제되고 메인 화면으로 이동합니다.
왼쪽 게시물이 이제는 보이지 않죠?
각 게시물 detail 페이지로 가는 링크 걸기
35
templates > posts.html
detail로 가는 url
을 명시해준 뒤,
해당 post의 pk도
같이 넘겨줍니다.
주의! 사실은 미
국날짜가 아니고
영국 날짜입니다.
! 완성된 화면 !
36
정리
• CRUD란? 데이터를 처리하는 네가지 기본 방식 – create read update delete
• forms.py 를 통해 사용자로부터 데이터를 직접 받을 수 있다.
• modelform을 이용하면 Model에 명시된 fields를 간단하게 form으로 만들수 있다.
• POST vs. GET 방식 차이는 데이터를 보낼 것이냐 vs. 가져올 것이냐 (http methods)
• {% csrf_token %} : POST 방식으로 데이터를 전송할때 사용하는 Django제공 보안 수단
• pk(primary key, 기본키): 각각의 데이터 객체를 구분하는 고유한(unique)한 값
37
38
끗.
과제
Github에 오늘 만든 프로젝트 업그레이드 후 제출
구글 드라이브 > 과제제출 > 9주차
제출기한: 6월 16일 23:59:59
1. github.txt : Github repo url 적어서 제출
• 프론트엔드 장식하기 (font, css, bootstrap 등 사용)
• main 페이지에 ‘새글쓰기(create)’ 창으로 가는 버튼 or 링크 추가하기
• README.md 생성: 본 강의자료 p.26 질문의 답 적어서 제출
CRUD 모든 기능 오류없이 작동 + README.md질문 답 정확해야 과제 제출로 인정됩니다.
2. screenshot.png : runserver  main 페이지 전체화면 스크린샷 제출
39
과제 예시: github.txt
40
• git init 명령은 반드시 BASE_DIR (manage.py 있는곳)에서 실행하세요.
• 같은 위치에 .gitignore 파일을 꼭 생성해 주세요. (가상환경이 올라가지 않도록 주의!)
• 반드시 .gitignore 파일을 생성한 뒤에 add-commit-push 를 진행해 주세요.
github 스크린샷 파일은 제출하지 않아도 됩니다.
과제 예시: screenshot.png
41
부록: 서버시간 한국 시간으로 바꾸기
42
부록: shell 사용
43
가상환경을 활성화 한 뒤 Bash창에서 이 명령어를 실행해 보
세요.
Bash창에서 model을 직접 조작할 수 있습니다.
Django - CRUD 기능 구현

More Related Content

What's hot

Embedded project presentation
Embedded project presentationEmbedded project presentation
Embedded project presentationJae-yeol Lee
 
9주 dom & event advanced 실습
9주  dom & event advanced 실습9주  dom & event advanced 실습
9주 dom & event advanced 실습지수 윤
 
2020년 4월 25일 개발 이야기 정리
2020년 4월 25일 개발 이야기 정리2020년 4월 25일 개발 이야기 정리
2020년 4월 25일 개발 이야기 정리Jay Park
 
Python 웹 프로그래밍
Python 웹 프로그래밍Python 웹 프로그래밍
Python 웹 프로그래밍용 최
 
2021년 3월 6일 개발자 이야기
2021년 3월 6일 개발자 이야기2021년 3월 6일 개발자 이야기
2021년 3월 6일 개발자 이야기Jay Park
 
웹 크롤링 (Web scraping) 의 이해
웹 크롤링 (Web scraping) 의 이해웹 크롤링 (Web scraping) 의 이해
웹 크롤링 (Web scraping) 의 이해2minchul
 
2020년 2월 1일 개발 이야기 정리
2020년 2월 1일 개발 이야기 정리2020년 2월 1일 개발 이야기 정리
2020년 2월 1일 개발 이야기 정리Jay Park
 
[5분 따라하기] git 다중 사용자 신원 설정 방법
[5분 따라하기] git 다중 사용자 신원 설정 방법[5분 따라하기] git 다중 사용자 신원 설정 방법
[5분 따라하기] git 다중 사용자 신원 설정 방법Jay Park
 
[5분 따라하기] git으로 undo하기(local편)
[5분 따라하기] git으로 undo하기(local편)[5분 따라하기] git으로 undo하기(local편)
[5분 따라하기] git으로 undo하기(local편)Jay Park
 
2020년 6월 6일 개발 이야기 정리
2020년 6월 6일 개발 이야기 정리2020년 6월 6일 개발 이야기 정리
2020년 6월 6일 개발 이야기 정리Jay Park
 
[5분 따라하기] bash에서 파일 확장자 변경
[5분 따라하기] bash에서 파일 확장자 변경[5분 따라하기] bash에서 파일 확장자 변경
[5분 따라하기] bash에서 파일 확장자 변경Jay Park
 
안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기은아 정
 
파알못의 파이썬 크롤러 이해하기
파알못의 파이썬 크롤러 이해하기파알못의 파이썬 크롤러 이해하기
파알못의 파이썬 크롤러 이해하기Hyeyeon Yang
 
JavaSript Template Engine
JavaSript Template EngineJavaSript Template Engine
JavaSript Template EngineOhgyun Ahn
 
[5분 따라하기] bash 타임아웃 패턴
[5분 따라하기] bash 타임아웃 패턴[5분 따라하기] bash 타임아웃 패턴
[5분 따라하기] bash 타임아웃 패턴Jay Park
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 YoungSu Son
 
Parse.com 맛보기
Parse.com 맛보기Parse.com 맛보기
Parse.com 맛보기flashscope
 
2020년 5월 2일 개발 이야기 정리
2020년 5월 2일 개발 이야기 정리2020년 5월 2일 개발 이야기 정리
2020년 5월 2일 개발 이야기 정리Jay Park
 
2020년 4월 18일 개발 이야기 정리
2020년 4월 18일 개발 이야기 정리2020년 4월 18일 개발 이야기 정리
2020년 4월 18일 개발 이야기 정리Jay Park
 
[5분 따라하기] 전화번호와 이메일 정규표현식
[5분 따라하기] 전화번호와 이메일 정규표현식[5분 따라하기] 전화번호와 이메일 정규표현식
[5분 따라하기] 전화번호와 이메일 정규표현식Jay Park
 

What's hot (20)

Embedded project presentation
Embedded project presentationEmbedded project presentation
Embedded project presentation
 
9주 dom & event advanced 실습
9주  dom & event advanced 실습9주  dom & event advanced 실습
9주 dom & event advanced 실습
 
2020년 4월 25일 개발 이야기 정리
2020년 4월 25일 개발 이야기 정리2020년 4월 25일 개발 이야기 정리
2020년 4월 25일 개발 이야기 정리
 
Python 웹 프로그래밍
Python 웹 프로그래밍Python 웹 프로그래밍
Python 웹 프로그래밍
 
2021년 3월 6일 개발자 이야기
2021년 3월 6일 개발자 이야기2021년 3월 6일 개발자 이야기
2021년 3월 6일 개발자 이야기
 
웹 크롤링 (Web scraping) 의 이해
웹 크롤링 (Web scraping) 의 이해웹 크롤링 (Web scraping) 의 이해
웹 크롤링 (Web scraping) 의 이해
 
2020년 2월 1일 개발 이야기 정리
2020년 2월 1일 개발 이야기 정리2020년 2월 1일 개발 이야기 정리
2020년 2월 1일 개발 이야기 정리
 
[5분 따라하기] git 다중 사용자 신원 설정 방법
[5분 따라하기] git 다중 사용자 신원 설정 방법[5분 따라하기] git 다중 사용자 신원 설정 방법
[5분 따라하기] git 다중 사용자 신원 설정 방법
 
[5분 따라하기] git으로 undo하기(local편)
[5분 따라하기] git으로 undo하기(local편)[5분 따라하기] git으로 undo하기(local편)
[5분 따라하기] git으로 undo하기(local편)
 
2020년 6월 6일 개발 이야기 정리
2020년 6월 6일 개발 이야기 정리2020년 6월 6일 개발 이야기 정리
2020년 6월 6일 개발 이야기 정리
 
[5분 따라하기] bash에서 파일 확장자 변경
[5분 따라하기] bash에서 파일 확장자 변경[5분 따라하기] bash에서 파일 확장자 변경
[5분 따라하기] bash에서 파일 확장자 변경
 
안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기
 
파알못의 파이썬 크롤러 이해하기
파알못의 파이썬 크롤러 이해하기파알못의 파이썬 크롤러 이해하기
파알못의 파이썬 크롤러 이해하기
 
JavaSript Template Engine
JavaSript Template EngineJavaSript Template Engine
JavaSript Template Engine
 
[5분 따라하기] bash 타임아웃 패턴
[5분 따라하기] bash 타임아웃 패턴[5분 따라하기] bash 타임아웃 패턴
[5분 따라하기] bash 타임아웃 패턴
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
 
Parse.com 맛보기
Parse.com 맛보기Parse.com 맛보기
Parse.com 맛보기
 
2020년 5월 2일 개발 이야기 정리
2020년 5월 2일 개발 이야기 정리2020년 5월 2일 개발 이야기 정리
2020년 5월 2일 개발 이야기 정리
 
2020년 4월 18일 개발 이야기 정리
2020년 4월 18일 개발 이야기 정리2020년 4월 18일 개발 이야기 정리
2020년 4월 18일 개발 이야기 정리
 
[5분 따라하기] 전화번호와 이메일 정규표현식
[5분 따라하기] 전화번호와 이메일 정규표현식[5분 따라하기] 전화번호와 이메일 정규표현식
[5분 따라하기] 전화번호와 이메일 정규표현식
 

Similar to Django - CRUD 기능 구현

퍼블리셔, 프론트엔드개발을 시작하다
퍼블리셔, 프론트엔드개발을 시작하다퍼블리셔, 프론트엔드개발을 시작하다
퍼블리셔, 프론트엔드개발을 시작하다정석 양
 
집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking
집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking
집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & RankingIan Choi
 
[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)Ildoo Kim
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13hungrok
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들Kivol
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3Daniel Lim
 
생활 코딩 #2(Simple Web Scraping with Python #2)
생활 코딩 #2(Simple Web Scraping with Python #2)생활 코딩 #2(Simple Web Scraping with Python #2)
생활 코딩 #2(Simple Web Scraping with Python #2)SeungYong Baek
 
파이썬 유용한 라이브러리
파이썬 유용한 라이브러리파이썬 유용한 라이브러리
파이썬 유용한 라이브러리SeongHyun Ahn
 
POSTGRES_사칙연산_익스텐션만들기.pdf
POSTGRES_사칙연산_익스텐션만들기.pdfPOSTGRES_사칙연산_익스텐션만들기.pdf
POSTGRES_사칙연산_익스텐션만들기.pdfLee Dong Wook
 
[2A7]Linkedin'sDataScienceWhyIsItScience
[2A7]Linkedin'sDataScienceWhyIsItScience[2A7]Linkedin'sDataScienceWhyIsItScience
[2A7]Linkedin'sDataScienceWhyIsItScienceNAVER D2
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Inho Kwon
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차Seong Bong Ji
 
Modern web application with meteor
Modern web application with meteorModern web application with meteor
Modern web application with meteorJaeho Lee
 
딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투Ubuntu Korea Community
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작Changwon Choe
 
SJBoard Project Portfolio
SJBoard Project PortfolioSJBoard Project Portfolio
SJBoard Project PortfolioJuyoungKang7
 
Python codelab2
Python codelab2Python codelab2
Python codelab2건희 김
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Kyoung Up Jung
 

Similar to Django - CRUD 기능 구현 (20)

퍼블리셔, 프론트엔드개발을 시작하다
퍼블리셔, 프론트엔드개발을 시작하다퍼블리셔, 프론트엔드개발을 시작하다
퍼블리셔, 프론트엔드개발을 시작하다
 
집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking
집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking
집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking
 
[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3
 
생활 코딩 #2(Simple Web Scraping with Python #2)
생활 코딩 #2(Simple Web Scraping with Python #2)생활 코딩 #2(Simple Web Scraping with Python #2)
생활 코딩 #2(Simple Web Scraping with Python #2)
 
파이썬 유용한 라이브러리
파이썬 유용한 라이브러리파이썬 유용한 라이브러리
파이썬 유용한 라이브러리
 
POSTGRES_사칙연산_익스텐션만들기.pdf
POSTGRES_사칙연산_익스텐션만들기.pdfPOSTGRES_사칙연산_익스텐션만들기.pdf
POSTGRES_사칙연산_익스텐션만들기.pdf
 
[2A7]Linkedin'sDataScienceWhyIsItScience
[2A7]Linkedin'sDataScienceWhyIsItScience[2A7]Linkedin'sDataScienceWhyIsItScience
[2A7]Linkedin'sDataScienceWhyIsItScience
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차
 
Modern web application with meteor
Modern web application with meteorModern web application with meteor
Modern web application with meteor
 
딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작
 
SJBoard Project Portfolio
SJBoard Project PortfolioSJBoard Project Portfolio
SJBoard Project Portfolio
 
Python codelab2
Python codelab2Python codelab2
Python codelab2
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기
 
Meteor2015 codelab
Meteor2015 codelab Meteor2015 codelab
Meteor2015 codelab
 

Django - CRUD 기능 구현

  • 1. CRUD E U N J U N G L E E D U K S U N G W O M E N ’ S
  • 2. 오늘의 할일 미리보기 2 *새로운 글을 만들고 마음껏 수정, 삭제도 해 보세요! https://limitless-earth-99193.herokuapp.com/ *모바일 접속 가능
  • 3. 오늘 할일: CRUD 기능을 통해 블로그 만들기  지난시간 복습 (model 생성,  static, templates 자원 한곳에서 관리하기  CRUD 개념 학습 • CRUD란 무엇인가? • CRUD action이 DB에 어떤 영향을 끼치는가? • http methods : get vs. post 방식의 쓰임과 차이점  CRUD 기능 실제로 구현하기 • forms.py를 이용해 사용자로부터 데이터 직접 입력받기 • pk(primary key)의 개념, 깜짝퀴즈 3
  • 4. 여기는 혼자 해보세요! 1. 바탕화면에 빈 폴더(binfolder)를 만들고 2. 그 안에 가상환경(myvenv)를 생성한 뒤 3. 가상환경 활성화  Django 설치 4. ‘blogprj’ 프로젝트 생성하기 5. ‘blog’ 앱 생성하기 6. settings.py에 앱 등록하기 7. runserver ! 4
  • 6. model 생성 && migrate 6 models.py
  • 7. admin에 등록하기 7 models.py에서 작성한 Post를 등록해주세요. blog > admin.py
  • 8. superuser 생성하기 8 $ python manage.py createsuperuser 127.0.0.1:8000/admin 방금 생성한 superuser 계정으로 로그인 합니다. 앞서 admin에 등록한 model Post가 보이네요.
  • 9. Post object 생성하기 9 게시물을 3개 생성해 주세요 목록으로 가면 생성한 게시물들이 보입니다.
  • 10. MTV pattern 10 사용자가 직접 Model object 생성, 수정, 삭제, 조회
  • 12. the acronym CRUD • Create – create or add new entries in a table in the database. • Read/Retrieve – read, retrieve, search, or view existing entries as a list(List View) or retrieve a particular entry in detail (Detail View) • Update – update or edit existing entries in a table in the database • Delete – delete, deactivate, or remove existing entries in a table in the database 12 CRUD action action CREATE 생성 새로운 데이터 추가 READ 읽어오기 이미 존재하는 데이터 불러오기 (DB 변화 X) UPDATE 수정/갱신하기 이미 존재하는 데이터 수정하기 DELETE 삭제하기 이미 존재하는 데이터 삭제하기 https://youtu.be/2S6H6URQiY8 “ 데이터(models.py)를 처리하는 기본적인 네가지 방식 ”
  • 13. static, templates 한곳으로 정리하기 (1) 13 BASE_DIR (blogprojectmom) TEMPLATES, STATIC 폴더 생 성 지난 시간에는 각각의 app 내에 static, templates 폴더를 만들었 습니다. 이제부터는 프로젝트 최상단에서 관리해 주겠습니다.
  • 14. static, templates 한곳으로 정리하기 (2) 14 TEMPLATES = [ ] 이 부분을 추가해 주세요. 같은 파일의 맨 끝에 왼 쪽 코드를 추가해 주세요. BASE_DIR에 있는 ‘templates’와 ‘static’ 폴더에 자원이 들어있다. 이제부턴 여기에 적어준 경로에서 자 원을 불러옵니다. setting.py # STATIC_ROOT = ‘/static/’
  • 15. 오늘 할 코딩의 overview 15 왜 delete 기능에만 template이 없나요? url은 view에 있는 함수를 실행하는 역할입니다. (url 자체가 html을 불러오는게 아님) 따라서 url과 template은 1:1 관계가 아님! urls.py views.py templates (.html) ‘’ def main posts.html ‘detail/게시물번호/’ def detail detail.html ‘create/’ def create create.html ‘update/’ def update update.html ‘delete/’ def delete 없음
  • 16. templates 생성 16 templates > create.html, detail.html, posts.html, update.html 생성 자동완성으로 뼈대만 만들어 주세요. template이 없으면 urls, views 작성할때 오류가 나서 미리 만들어 둡니다.
  • 17. 목록보기 views/urls 생성 17 views.py urls.py 함수는 return render(request, template, context) 형식으로 작성합니다. template에서 호출할 내용들을 context 부 분의 dictionary 안에 밝혀주세요.
  • 18. 목록보기 template 만들기 18 templates > posts.html posts.all = Post.objects.all for문을 써서 Post 객체들 전체를 순 회합니다.
  • 19. 사용자가 데이터 직접 등록 - forms.py 생성 19 blog > forms.py ModelForm 사용 Model Post의 fields 중에서 사용자가 직접 데이터 를 입력, 전송하는 fields를 밝혀줍니다.
  • 20. create.html 만들기 20 templates > create.html {% csrf_token %} Django에서 POST 방식 으로 데이터를 전송할때 기본으로 제공하는 보안 수단 {{ form.as_p }} p태그를 사용해서 form 생성하기 {{ form.as_table }} {{ form.as_ul }}
  • 21. GET vs. POST (1) 21 GET POST GET POST action 데이터 읽어오기 새로운 데이터 생성 또는 수정 데이터 영향 데이터에 영향 없음, 단순 불러오 기 데이터 변화 O, 새로운 데이터 생성 url url(주소창)에 데이터 딸려나옴 url에 아무것도 보이지 않음 보안 보안에 취약 (url에 보임, caching됨) get에 비해 괜찮음 (브라우저에 데이터 저장되지 않음) default method O 기본 http 요청 방식, 따로 밝히지 않으면 항상 get 방식 요청 X 반드시 post라고 밝혀줘야 함. 클라이언트 웹 서버
  • 22. GET vs. POST (2) 22 자유게시판에 새로운 글 등록하기 GET POST 역대총장 소개글 메뉴
  • 23. create 함수 작성 23 views.py If: 사용자가 POST 방식으로 request 요청을 보내면 (submit 버튼을 누르면)  유효성 검증을 한 뒤, 내용 을 저장하고 main 페이지로 돌아가기 else: POST 방식이 아니면 (새글쓰 기 페이지를 처음 열었으면)  PostForm을 열어줘라 # import redirect form 변수에 PostForm 할당
  • 25. 확인해보기 25 등록하기 버튼 클릭  새 글이 등록되고 main 페이지로 이동합니
  • 26. detail view/url 작성 26 views.py urls.py Import get_object_or_40 4 특정 게시물 지정을 위 해 pk값을 꼭 밝혀주세 요. pk로 pk 사용
  • 27. Primary Key 27 “그렇다면 PK가 될 수 있는 field와 그렇지 못한 field는?” 덕성멋사 회원 DB: [id, 역할, 이름, 학번, 학과/학부, 전화번호, 이메일 ] pk(primary key)란? : 기본키, 각각의 데이터 객체(object)를 구분할 수 있게 하는 유일하고 중복되지 않는(unique) 값 a.k.a 데이터의 주민등록번호 참고: Django에서 model을 통해 DB를 생성할 때는 pk를 자동 생 성해 줍니다. 따라서 id필드를 따로 만들지 않아도 됩니다. 과제
  • 30. update.html 만들기 30 templates > update.html create.html의 내용과 똑같 습니다. views.py의 함수를 살펴보면 Post가 생성될때 저장된 데 이터를 받아온다는 점만 다릅 니다.
  • 31. update views/urls 작성 31 views.py urls.py 해당 post의 pk도 같 이 넘겨줍니다. 해당 post 객체에 이미 저장된 내용을 불 러옵니다. 나머지는 create 함수와 똑같습니다.
  • 32. delete views/urls 작성 32 views.py urls.py 삭제 작업은 특정 게시물 1개만을 대상으로 실행됩니다. 따라서 pk값도 같이 인자로 넘겨줍 니다. 마찬가지로 url에도 pk값을 꼭 적어주세요.
  • 33. 삭제하기 버튼 만들기 33 templates > detail.html 해당(특정) 게시물을 찾기 위해서는 delete함수를 호출하는 url에 pk값도 꼭 넣어줘야 합니다. location.href라는 정체불명의 코드는 나중에 javascript에서 배웁니다. 지금은 그냥 따라 쓰
  • 34. 삭제기능 테스트하기 34 삭제하기 버튼을 누르면 게시물이 삭제되고 메인 화면으로 이동합니다. 왼쪽 게시물이 이제는 보이지 않죠?
  • 35. 각 게시물 detail 페이지로 가는 링크 걸기 35 templates > posts.html detail로 가는 url 을 명시해준 뒤, 해당 post의 pk도 같이 넘겨줍니다. 주의! 사실은 미 국날짜가 아니고 영국 날짜입니다.
  • 37. 정리 • CRUD란? 데이터를 처리하는 네가지 기본 방식 – create read update delete • forms.py 를 통해 사용자로부터 데이터를 직접 받을 수 있다. • modelform을 이용하면 Model에 명시된 fields를 간단하게 form으로 만들수 있다. • POST vs. GET 방식 차이는 데이터를 보낼 것이냐 vs. 가져올 것이냐 (http methods) • {% csrf_token %} : POST 방식으로 데이터를 전송할때 사용하는 Django제공 보안 수단 • pk(primary key, 기본키): 각각의 데이터 객체를 구분하는 고유한(unique)한 값 37
  • 39. 과제 Github에 오늘 만든 프로젝트 업그레이드 후 제출 구글 드라이브 > 과제제출 > 9주차 제출기한: 6월 16일 23:59:59 1. github.txt : Github repo url 적어서 제출 • 프론트엔드 장식하기 (font, css, bootstrap 등 사용) • main 페이지에 ‘새글쓰기(create)’ 창으로 가는 버튼 or 링크 추가하기 • README.md 생성: 본 강의자료 p.26 질문의 답 적어서 제출 CRUD 모든 기능 오류없이 작동 + README.md질문 답 정확해야 과제 제출로 인정됩니다. 2. screenshot.png : runserver  main 페이지 전체화면 스크린샷 제출 39
  • 40. 과제 예시: github.txt 40 • git init 명령은 반드시 BASE_DIR (manage.py 있는곳)에서 실행하세요. • 같은 위치에 .gitignore 파일을 꼭 생성해 주세요. (가상환경이 올라가지 않도록 주의!) • 반드시 .gitignore 파일을 생성한 뒤에 add-commit-push 를 진행해 주세요. github 스크린샷 파일은 제출하지 않아도 됩니다.
  • 42. 부록: 서버시간 한국 시간으로 바꾸기 42
  • 43. 부록: shell 사용 43 가상환경을 활성화 한 뒤 Bash창에서 이 명령어를 실행해 보 세요. Bash창에서 model을 직접 조작할 수 있습니다.

Editor's Notes

  1. 제목
  2. 5분 제한시간을 드릴테니 혼자서 해보세요.
  3. 이제 같이 쳐 봅시다. 초록색으로 된 주석 부분은 안 치셔도 돼요. Class Post 생성하고 field 생성할께요. Max_length는 최대 글자수 지정, 여기서 영어로 100이라고 해도 한글로 100자 안됨. DateTimeField : auto_now_add=True 제목 표시 Migrate까지 해야 model 생성의 완성 중간에 내용이 변경되어도 migration 해 주세요.
  4. Admin 페이지에서 직접 관리할 수 있도록 등록하기
  5. Superuser 관리자 생성 login까지
  6. 게시물 3개 생성
  7. MTV 패턴 Urls.py: views.py 함수 호출  models.py에서 생성된 DB 접근, template 접근 오늘은 CRUD를 통해서 데이터베이스 사용자가 직접 조작 데이터베이스? 생소할 수 있지만 models.py를 통해 SQL문을 쓰지 않고 DB를 생성함
  8. CRUD는 Create, Read, Update, Delete 데이터를 처리하는 네가지 기본적인 방식 생활코딩 이고잉 – 동영상
  9. Templates, Static
  10. Staticfiles_dirs. 속성은 개발중 static file 서빙 Debug=True로 되어있어야 함. 검색하다보면 static_root 속성도 나오는데 staticfiles_dirs와 같이 쓰면 오류가 나요. Static 폴더 설정은 Heroku 배포할때 자세하게 설명
  11. Date 필드는 auto_now_add = True라서 자동 생성
  12. csrf 토큰을 빼먹으면 에러남.
  13. 얘는 답을 과제로 제출해 주세요.
  14. 삭제하기  delete 함수 실행
  15. 미국날짜 아니고 그리니치 천문대가 있는 영국 시간이었음