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 기능 구현

Django - CRUD 기능 구현

  • 1.
    CRUD E U NJ 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
  • 5.
  • 6.
    model 생성 &&migrate 6 models.py
  • 7.
  • 8.
    superuser 생성하기 8 $ pythonmanage.py createsuperuser 127.0.0.1:8000/admin 방금 생성한 superuser 계정으로 로그인 합니다. 앞서 admin에 등록한 model Post가 보이네요.
  • 9.
    Post object 생성하기 9 게시물을3개 생성해 주세요 목록으로 가면 생성한 게시물들이 보입니다.
  • 10.
    MTV pattern 10 사용자가 직접Model object 생성, 수정, 삭제, 조회
  • 11.
  • 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 할당
  • 24.
  • 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필드를 따로 만들지 않아도 됩니다. 과제
  • 28.
  • 29.
  • 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도 같이 넘겨줍니다. 주의! 사실은 미 국날짜가 아니고 영국 날짜입니다.
  • 36.
  • 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
  • 38.
  • 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 스크린샷 파일은 제출하지 않아도 됩니다.
  • 41.
  • 42.
    부록: 서버시간 한국시간으로 바꾸기 42
  • 43.
    부록: shell 사용 43 가상환경을활성화 한 뒤 Bash창에서 이 명령어를 실행해 보 세요. Bash창에서 model을 직접 조작할 수 있습니다.

Editor's Notes

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