일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Planned
- 백트래킹
- 모각코
- 그리디알고리즘
- DP
- Bellman-Ford
- 프로그래머스
- 소프트웨어공학
- MyPlaylist
- 마라마라빔
- Kruskal
- BFS
- minimum spanning tree
- 동적계획법
- 실습
- 최소스패닝트리
- codetree
- DFS
- 백준
- SQL
- programmers
- 알고리즘
- 종합설계
- 코드트리
- 장고
- 함밥
- 데이터베이스
- B대면노래방
- django
- 파이썬
- Today
- Total
Leta Learns
django | CRUD - Create 본문
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 |