-
[Django] 글쓰기 기능 HTML Form으로 만들기 vs Django Form으로 만들기프로그래밍/Django & Flask 2020. 11. 22. 21:38반응형
장고에서 글쓰기 기능을 만들 수 있는 방법은 2가지가 있다 (내가 아는것만 ㅎ)
1. HTML Form으로 만들기
2. Django가 제공해주는 Form으로 만들기
오늘은 이 두가지 기능을 비교해보려고 한다!
HTML form으로 만들기
views.py
def create(request): if request.method == 'GET': return render(request, 'post/create.html') elif request.method == 'POST': user_id = request.session.get('user_id') res_data = {} if not (request.FILES.get('posting_photo') and request.POST['posting_content']): res_data['error'] = "이미지 혹은 내용을 입력해주세요" return render(request, 'post/create.html', res_data) post = Post() post.posting_writer = user_id post.posting_photo = request.FILES['posting_photo'] post.posting_content = request.POST['posting_content'] post.posting_like = 0 post.save() return redirect('/') return render(request, 'post/create.html')
urls.py
path('', views.create, name='create'),
create.html
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title></title> </head> <body> <form class="" method="post" enctype="multipart/form-data"> {% csrf_token %} <p>사진</p> <input type="file" name="posting_photo"> <p>글 내용</p> <textarea name="posting_content" rows="10" cols="30"></textarea> <button type="submit" name="button">글 작성하기</button> <p> {{ error }}</p> </form> </body> </html>
Django가 제공하는 Form으로 만들기
views.py
def newpost(request): if request.method == "POST": form = PostForm(request.POST) if form.is_valid(): post = form.save(commit=False) post.posting_writer = user_id = request.session.get('user_id') post.like = 0 post.save() return redriect('/') else: form = PostForm() return render(request, 'post/new.html', {'form':form})
urls.py
path('newpost', views.newpost, name='newpost'),
new.html
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title></title> </head> <body> <form method="post"> {% csrf_token %} <table> {{ form.as_table }} </table> <br> <input type="submit" value="제출하기"> </form> </body> </html>
여기에 forms.py가 추가된다. forms.py는 만들고 싶은 앱 폴더에 따로 생성해줘야 한다.
forms.py
from django import forms from .models import Post class PostForm(forms.ModelForm): class Meta: model = Post fields = ['posting_photo', 'posting_content']
반응형'프로그래밍 > Django & Flask' 카테고리의 다른 글
[Django] url 태그 인자 2개 보내기 (0) 2020.11.24 [Django] 각 포스트마다 댓글 출력하기(~ing) (0) 2020.11.23 [🌜 github] fatal: remote origin already exists. 에러 (0) 2020.11.20 [Django Project] 게시글 올리기 & 출력하기 (0) 2020.11.03 [~ing][Django] a 태그는 되는데 button 태그는 안된다. (href) (0) 2020.10.31