ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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']
    반응형

    댓글

Designed by Tistory.