Leta Learns

django | CRUD - Create 본문

Django

django | CRUD - Create

leta 2021. 7. 7. 01:11

HTTP의 GET, POST 메소드

GET => 데이터를 얻기 위한 요청, 데이터가 URL에 보임

POST => 데이터를 생성하기 위한 요청, URL에 데이터 노출 x, csrf 공격 방지

 

csrf (사이트 간 요청 위조, 크로스 사이트 요청 위조, Cross-site request forgery)

: 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격.

  사용자가 웹사이트에 로그인한 상태에서 csrf 공격 코드가 삽입된 페이지를 열면, 공격 대상이 되는 웹사이트는 위조된 공격명령을 믿을 수 있는 사용자가 발송한 것이라고 판단. -> 공격에 노출됨.

   => form 태그 안에 반드시 {%csrf_token%} 이라는 템플릿 변수 적어줘야 함.

2021.07.03 - [Django] - [점프 투 장고] 2-05 ~ 2-07

 

 

 

create 함수 만들기

views.py

from django.shortcuts import render, get_object_or_404, redirect
from .models import Blog
from django.utils import timezone
# Create your views here.

def home(request):
    blogs = Blog.objects.all() #Blog 객체를 모두 가져온다. -> Blog 테이블의 모든 row를 가져온다.
    return render(request, 'home.html', {'blogs': blogs})

def detail(request, id):
    blog = get_object_or_404(Blog, pk=id) #models.py에 있는 Blog
    return render(request, 'detail.html', {'blog': blog})

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

def create(request):
    new_blog = Blog()
    new_blog.title = request.POST['title']
    new_blog.writer = request.POST['writer']
    new_blog.body = request.POST['body']
    new_blog.pub_date = timezone.now()
    new_blog.save()
    return redirect('detail', new_blog.id)

new_blog = Blog()

#models.py에서 만든 Blog 데이터 테이블에서 빈 행 하나를 만드는 코드

  => 값이 아무것도 없는 게시글 하나를 선언한 것.

 

new_blog.title = request.POST['title']

#new_blog = Blog()로 만든 빈 행에 데이터를 적절하게 채워넣을 것. 

  title 이름을 가진 행에 title데이터를 POST 해주겠다는 것.

  writer, body도 마찬가지.

 

from django.utils import timezone

new_blog.pub_date = timezone.now()

#행의 pub_date의 내용을 현재 시간으로 채워넣는다.

  timezone.now()는 장고에서 제공하는 모듈을 사용하는 것이므로 import 해줘야 함.

 

new_blog.save()

#만든 행 저장

 

from django.shortcuts import redirect

return redirect('detail', new_blog.id)

# redirect 함수 : 요청이 들어오면 이 url로 가자!

                      => urls.py의 detail함수 호출. 이때 new_blog.id는 detail함수가 받아야 하는 id값으로 넘겨짐.

더보기

지금까지는 return render를 했었음

render : 요청이 들어오면 이 html 파일을 보여줘!

 

 

 

'Django' 카테고리의 다른 글

django | CRUD - Delete  (0) 2021.07.07
django | CRUD - Update  (0) 2021.07.07
django | CRUD - Read  (0) 2021.07.06
django | Model & Admin  (0) 2021.07.06
django | 기본 틀 정리 (가상환경, 장고 설치, 서버 실행 etc)  (0) 2021.07.06
Comments