코딩공부/Python Django

[django 실습]게시판 만들기 - 글 쓰기 기능 만들기

integerJI 2020. 2. 21. 21:40

[django] python django 게시판 만들기 - 글 쓰기 기능 만들기

 

드디어 진도를 나가네요


model, admin 설정 : https://integer-ji.tistory.com/89

views에 데이터 가져오기 : https://integer-ji.tistory.com/90

detail page 만들기 : https://integer-ji.tistory.com/91

setting 설정, 데이터 자르기, 정렬하기 : https://integer-ji.tistory.com/93

getbootstrap으로 홈페이지 꾸미기 : https://integer-ji.tistory.com/94

템플릿 상속, url 관리하기 : https://integer-ji.tistory.com/95

디자인 쪼끔 수정 : https://integer-ji.tistory.com/97


언제나 시작은 가상 환경 실행, 디렉터리 이동

source myvenv/Scripts/activate

cd crudproject/

 

 

새로운 페이지.html 생성하는 방법

html을 만들면 해야할것 3가지


1. templates 폴더 안에 html파일 만들기


2. views.py에 함수 설정하기


3. urls.py url 만들기

 

 

crudapp/templates/create.html 만들기

{% extends 'base.html' %}

{% block content %}

<br>
<div class="container">
	<form action="">
	  <h4>제목: </h4>
	  <input type="text" name="title">
	  <br>
	  <br>
	  <h4>본문: </h4>
	  <textarea cols=40 rows=10 name="body"></textarea>
	  <br>
	  <br>
	  <input class="btn btn-dark" type="submit" value="글쓰기">
  </form>
</div>

{% endblock %}

 

navbar을 가져오기 위한 base.html 상속

 

글을 쓰기위한 form

 

form은 추후 bootstrap을 이용해 수정합시다.

 

views.py create 함수 설정

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

 

 

crudapp/urls.py url 설정하기

from django.urls import path
from . import views

urlpatterns = [
    path('new/', views.new, name='new'),
    path('detail/<int:blog_id>/', views.detail, name='detail'),
    path('create/', views.create, name='create'),
]

 

저번시간에 url을 묶어줬기 때문에 이제는 project에 있는 url이 아니라 app에 있는 url에 입력해 주어야 합니다.

 

 

create url html에 넣기

<li class="nav-item">
<a class="nav-link" href="{% url 'create' %}">new post</a>
</li>

 

base.html에 link칸을 new post로 바꿔주었습니다.

 

url은 create

 

 

확인

 

잘 나오고

 

잘 작동합니다.

 

이제 글쓰기 버튼을 눌렀을때 실행되는 함수를 만들어 줍니다.

 

 

views.py 함수 추가

from django.shortcuts import render, get_object_or_404, redirect
from django.utils import timezone
from .models import Blog

# Create your views here.

def home(request):
    blogs = Blog.objects.order_by('-id')
    return render(request, 'home.html', {'blogs': blogs})

def detail(request, blog_id):
    blog_detail = get_object_or_404(Blog, pk=blog_id)
    return render(request, 'detail.html', {'blog': blog_detail})

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

def postcreate(request):
    blog = Blog()
    blog.title = request.GET['title']
    blog.body = request.GET['body']
    blog.pub_date = timezone.datetime.now()
    blog.save()
    return redirect('/crudapp/detail/' + str(blog.id))

 

1번줄 redirect 추가

 

글을 쓴 뒤 해당 글로  redirect로 이동해야하기 때문

 

2번줄 timezone 추가

 

글쓴 시간을 설정된 시간으로 저절로 저장

 

postcreate 함수 추가

 

blog란 이름은 Blog()에 담기고

 

blog.title과 body는 GET 방식으로 오는 title과 body의 이름들의 값 ( create.html에서 )

 

pub_date는 서버 시간 저장

 

save

 

해당 글로 바로 페이지 생성 url은 '/crudapp/detail/'에 해당 blog.id로 이동

 

저희 detail페이지의 url 주소는 url을 묶어주어

 

http://127.0.0.1:8000/crudapp/detail/x/

 

입니다. 그러므로 해당 주소로 바로 이동하기 위해 /crudapp/detail/ str(blog.id)

 

 

 

urls.py url 추가

from django.urls import path
from . import views

urlpatterns = [
    path('new/', views.new, name='new'),
    path('detail/<int:blog_id>/', views.detail, name='detail'),
    path('create/', views.create, name='create'),
    path('postcreate/', views.postcreate, name='postcreate'),
]

 

 

create.html url 추가

{% extends 'base.html' %}

{% block content %}

<br>
<div class="container">
	<form action="{% url 'postcreate' %}">
	  <h4>제목: </h4>
	  <input type="text" name="title">
	  <br>
	  <br>
	  <h4>본문: </h4>
	  <textarea cols=40 rows=10 name="body"></textarea>
	  <br>
	  <br>
	  <input class="btn btn-dark" type="submit" value="글쓰기">
  </form>
</div>

{% endblock %}

 

 

확인

 

 

글쓰기 버튼을 누르면

 

해당 detail로 바로 이동해야합니다.

 

 

성공

 

 

git push

git init

git add .

git commit -m "코멘트"

 

git push origin master

 

 

 - 끝 -

 

---

 

다음시간은 수정과 삭제 진행