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
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 작성할때 오류가
나서 미리 만들어 둡니다.
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 할당
27. Primary Key
27
“그렇다면 PK가 될 수 있는 field와
그렇지 못한 field는?”
덕성멋사 회원 DB: [id, 역할, 이름, 학번, 학과/학부, 전화번호, 이메일 ]
pk(primary key)란?
: 기본키, 각각의 데이터 객체(object)를 구분할
수 있게 하는 유일하고 중복되지 않는(unique)
값
a.k.a 데이터의 주민등록번호
참고: Django에서 model을 통해 DB를 생성할 때는 pk를 자동 생
성해 줍니다. 따라서 id필드를 따로 만들지 않아도 됩니다.
과제
33. 삭제하기 버튼 만들기
33
templates > detail.html
해당(특정) 게시물을 찾기 위해서는 delete함수를 호출하는 url에 pk값도 꼭 넣어줘야 합니다.
location.href라는 정체불명의 코드는 나중에 javascript에서 배웁니다. 지금은 그냥 따라 쓰
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 스크린샷 파일은 제출하지 않아도 됩니다.
43. 부록: shell 사용
43
가상환경을 활성화 한 뒤 Bash창에서 이 명령어를 실행해 보
세요.
Bash창에서 model을 직접 조작할 수 있습니다.
Editor's Notes
제목
5분 제한시간을 드릴테니 혼자서 해보세요.
이제 같이 쳐 봅시다.
초록색으로 된 주석 부분은 안 치셔도 돼요.
Class Post 생성하고 field 생성할께요.
Max_length는 최대 글자수 지정, 여기서 영어로 100이라고 해도 한글로 100자 안됨.
DateTimeField : auto_now_add=True
제목 표시
Migrate까지 해야 model 생성의 완성
중간에 내용이 변경되어도 migration 해 주세요.
Admin 페이지에서 직접 관리할 수 있도록 등록하기
Superuser 관리자 생성 login까지
게시물 3개 생성
MTV 패턴
Urls.py: views.py 함수 호출 models.py에서 생성된 DB 접근, template 접근
오늘은 CRUD를 통해서 데이터베이스 사용자가 직접 조작
데이터베이스? 생소할 수 있지만 models.py를 통해 SQL문을 쓰지 않고 DB를 생성함
CRUD는 Create, Read, Update, Delete
데이터를 처리하는 네가지 기본적인 방식
생활코딩 이고잉 – 동영상
Templates, Static
Staticfiles_dirs. 속성은 개발중 static file 서빙
Debug=True로 되어있어야 함.
검색하다보면 static_root 속성도 나오는데 staticfiles_dirs와 같이 쓰면 오류가 나요.
Static 폴더 설정은 Heroku 배포할때 자세하게 설명