21. 글 쓰기 처리 - eungyukm/DjangoBase GitHub Wiki

글 쓰기 처리

  1. board_app/views.py
from curses import def_prog_mode
from tempfile import template
from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader

# Create your views here.
def board_main(request) :
    template = loader.get_template('board_main.html')

    render_data = {

    }
    return HttpResponse(template.render(render_data, request))

# board/board_modify
def board_modify(request) :
    template = loader.get_template('board_modify.html')
    render_data = {

    }
    return HttpResponse(template.render(render_data, request))

# board/board_read
def board_read(request):
    template = loader.get_template('board_write.html')
    render_data = {

    }
    return HttpResponse(template.render(render_data, request))

# board/board_write
def board_write(request):
    template = loader.get_template('board_write.html')
    render_data = {

    }
    return HttpResponse(template.render(render_data, request))
  1. /board/board_main에서 게시판 이름이 나오도록 합니다.
    board_app/views.py의 board_main 함수에 board_info_idx 파라미터를 추출한 후에 게시판 이름 데이터를 가져옵니다.
    그후, board_app/templates/board_main.html 파일의 게시판 이름에 적용해 줍니다.
def board_main(request) :
    # 파라미터를 추출합니다.
    board_info_idx = request.GET['board_info_idx']

    # 현재 게시판 정보를 가져옵니다.
    board_model = board_app.models.BoardInfoTable.objects.get(board_info_idx=board_info_idx)

    template = loader.get_template('board_main.html')

    render_data = {
        'board_data' : board_model
    }
    return HttpResponse(template.render(render_data, request))
<h4 class="card-title">{{board_data.board_info_name}}</h4>
  1. board_app/templates/board_main.html 파일에 글쓰기 링크에
    board_info_idx 파라미터를 붙여줍니다.
def board_main(request) :
    # 파라미터를 추출합니다.
    board_info_idx = request.GET['board_info_idx']

    # 현재 게시판 정보를 가져옵니다.
    board_model = board_app.models.BoardInfoTable.objects.get(board_info_idx=board_info_idx)

    template = loader.get_template('board_main.html')

    render_data = {
        'board_data' : board_model,
        'board_info_idx' : board_info_idx,
    }
    return HttpResponse(template.render(render_data, request))
<a href="/board/board_write?board_info_idx={{board_info_idx}}" class="btn btn-primary">글쓰기</a>
  1. 저장 처리를 수행합니다.
  • board_app/templates/board_write.html의 form 태그의 주소를 설정합니다.
  • csrf_token 설정을 해줍니다.
<form action="/board/board_write_result" method="post">
{% csrf_token %}
  1. board_write.html의 form 태그에 input type hidden으로 게시판 번호를 설정해 줍니다.
def board_write(request):
    # 파라미터를 추출합니다.
    board_info_idx = request.GET['board_info_idx']

    template = loader.get_template('board_write.html')
    render_data = {
        'board_info_idx' : board_info_idx
    }
    return HttpResponse(template.render(render_data, request))
<input type="hidden" name="board_info_idx" value="{{board_info_idx}}"/>
  1. url을 아래와 같이 처리합니다.
from django.urls import path
from . import views
from django.urls import include

urlpatterns = [
    path('board_main', views.board_main, name='board_main'),
    path('board_modify', views.board_main, name='board_modify'),
    path('board_read', views.board_main, name='board_read'),
    path('board_write', views.board_write, name='board_write'),
]
  1. board_app/urls.py 파일에 /board/board_write_result 주소를 등록합니다.
from django.urls import path
from . import views
from django.urls import include

urlpatterns = [
    path('board_main', views.board_main, name='board_main'),
    path('board_modify', views.board_main, name='board_modify'),
    path('board_read', views.board_main, name='board_read'),
    path('board_write', views.board_write, name='board_write'),
    path('board_write_result', views.board_write_result, name='board_write_result'),
]
  1. board_app/views.py 파일에 board_write_result 함수를 작성하고
    파라미터 데이터를 추출해 저장하는 작업을 합니다.
    파일 첨부처리는 하지 않는다.
    장고에서 외래키 관계로 묶여있을 경우, 객체를 넣어야 합니다.
@csrf_exempt
def board_write_result(request) :
    content_subject = request.POST['board_subject']
    content_text = request.POST['board_content']
    content_date = timezone.localtime()

    content_writer_idx = request.session['login_user_idx']
    # 외래키(BoardInfoTable의 PK 컬럼을 참조한다)
    content_board_idx = request.POST['board_info_idx']

    content_model = board_app.models.ContentTable()
    content_model.content_subject = content_subject
    content_model.content_text = content_text
    content_model.content_date = content_date

    content_writer_model = user_app.models.UserTable.objects.get(user_idx=content_writer_idx)
    content_board_model = board_app.models.BoardInfoTable.objects.get(board_info_idx = content_board_idx)

    content_model.content_writer_idx = content_writer_model
    content_model.content_board_idx = content_board_model
    content_model.save()

    message = '''
            <script>
                alert('저장되었습니다')
                locaiton.href = '/board/board_read'
            </script>
            '''
    return HttpResponse(message)
⚠️ **GitHub.com Fallback** ⚠️