new.html 생성하기
1. views.py에 new함수 생성
from django.shortcuts import render, get_object_or_404
from .models import Blog
def home(request):
blogs = Blog.objects.all()
return render(request, 'home.html', {'blogs' : blogs})
def detail(request, id): #매개변수를 하나더 받는다 # 404에러를 뜨게 하거나 blog를 띄우거나
blog = get_object_or_404(Blog,pk=id) #pk는 기본키, 관계형 DB에서 식별자를 뜻한다.
return render(request, 'detail.html', {'blog' : blog})
def new(request):
return render(request, 'new.html')
2. templates에 new.html 생성하기
3. urls.py에 path 생성
from django.contrib import admin
from django.urls import path
from blog.views import * #blog 앱의 views.py의 모든 함수를 가져온다.
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name="name"),
path('<str:id>', detail, name="detail"),
path('new/', new, name="new"),
]
4. home.html에 new.html연결
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initia-scale=1.0">
<title>BLOG</title>
<style>
body{text-align: center;}
</style>
</head>
<body>
<h1>Blog Project</h1>
<div>
<a href="{%url 'new' %}">Write</a>
</div>
<div class="container">
{%for blog in blogs %}
<div>
<h3>{{blog.title}} </h3>
{{blog.id}}
{{blog.writer}}
{{blog.summary}} <a href="{% url 'detail' blog.id %}"> ...more </a> <br>
</div>
{% endfor %}
</div>
</body>
</html>
5. new.html 작성하기
<h1>Write Your Blog</h1>
<form action="" method="post">
{%csrf_token%} <!-- 서버에서 csrf공격이 아니라는것을 인식을 함 -->
<p>제목 : <input type="text" name="title"></p>
<p>작성자 : <input type="text" name="writer"></p>
본문 : <textarea name="body" id="" cols="30" rows="10"></textarea>
<button type="submit">Submit</button>
</form>
< GET vs POST >
- GET : 데이터를 얻기 위한 요청, 데이터가 url에 보임
- POST : 데이터를 생성하기 위한 요청, 데이터가 url에 안보임, Csrf 공격 방지(사이트 간 요청 위조는 사이트 취약점 공격중 하나이다.)
Crate 기능 만들기
1. views.py에서 함수 만들기
from django.shortcuts import render,redirect, get_object_or_404
from django.utils import timezone #추가
from .models import Blog
def home(request):
blogs = Blog.objects.all()
return render(request, 'home.html', {'blogs' : blogs})
def detail(request, id):
blog = get_object_or_404(Blog,pk=id)
return render(request, 'detail.html', {'blog' : blog})
def new(request):
return render(request, 'new.html')
def create(request):
#객체들을 저장하는 법
new_blog = Blog() #Blog라는 클래스, new_blog는 Blog의 object
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() #저장
#어떤 화면으로 이동할 것인지 , render가 아닌 redirect(원래 있던 페이지로 이동)
return redirect('detail', new_blog.id) #home.html에서 detail을 넘겨줄때 id값도 넘겨줬기에.. id를 전달해줘야한다.
2. urls.py에 path추가
from django.contrib import admin
from django.urls import path
from blog.views import *
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name="name"),
path('<str:id>', detail, name="detail"),
path('new/', new, name="new"),
path('create/', create, name="create"),
]
3. new.html의 form action 추가
<h1>Write Your Blog</h1>
<form action="{%url 'create' %}" method="post">
{%csrf_token%}
<p>제목 : <input type="text" name="title"></p>
<p>작성자 : <input type="text" name="writer"></p>
본문 : <textarea name="body" id="" cols="30" rows="10"></textarea>
<button type="submit">Submit</button>
</form>
4. runserver
'Back-end > Django' 카테고리의 다른 글
[Django] CRUD - Delete (0) | 2021.07.19 |
---|---|
[Django] CRUD - Update (0) | 2021.07.19 |
[Django] CRUD - Read (0) | 2021.07.19 |
[Django] Model 실습 (0) | 2021.07.19 |
[Django] Django와 데이터베이스 (0) | 2021.07.19 |
댓글