[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
- 끝 -
---
다음시간은 수정과 삭제 진행
'코딩공부 > Python Django' 카테고리의 다른 글
[django 실습] 게시판 만들기 - 글 삭제 기능 만들기 (3) | 2020.02.23 |
---|---|
[django 실습]게시판 만들기 - 글 수정 기능 만들기 (2) | 2020.02.22 |
[django 실습] 게시판 만들기 - 디자인 수정 기록 (0) | 2020.02.21 |
[django 실습] 게시판 만들기 - 템플릿 상속, url 관리하기 (0) | 2020.02.21 |
[django 실습] 게시판 만들기 - getbootstrap으로 홈페이지 꾸미기 (2) | 2020.02.21 |