Coding Is My Life

코딩은 인생

파이썬

[Django Project][community 만들기 - 게시판 만들기(2)]

산기대 컴공 2021. 12. 23. 09:47
728x90

글쓰기 만들기

저번에 만든 게시판 기능에 글쓰기 기능을 추가해 보겠다.

일단 글쓰기에 사용될 html코드를 부트스트랩의 기본 예제로 간단하게 만들어 보았다. 

<html>
    <head>
        <meta charset="UTF-8">
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
        <style>
                        .nav_1{
                background: rgba(0,0,0,0.1);
                border-bottom: 1px solid gray;
                height: 50px;
                text-align: right;
            }
            .form{
              margin:30px;
            }
        </style>
    </head>
    <body>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
        <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js" integrity="sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB" crossorigin="anonymous"></script>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js" integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13" crossorigin="anonymous"></script>
        <div class="nav_1">
        <ul class="nav justify-content-end">
            <li class="nav-item">
                <a class="nav-link active" aria-current="page" href="/">홈</a>
            </li>
            <li class="nav-item">
              <a class="nav-link active" aria-current="page" href="#">비트코인</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="/finance/stock">주식</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="/bored/list"> 게시판</a>
              </li>
            <li class="nav-item">
              <a class="nav-link" href="/user/sign_up">회원가입</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href = "/user/login">로그인</a>
            </li>
          </ul>
        </div>
        <form class = "form" action="." method = "post">
          {% csrf_token %}
          <p>{{error}}</p>
          <div class="mb-3">
            <label for="exampleFormControlInput1" class="form-label">제목</label>
            <input type="text" class="form-control" id="title" placeholder="제목" name = 'title'>
          </div>
          <div class="mb-3">
            <label for="exampleFormControlTextarea1" class="form-label">내용</label>
            <textarea class="form-control" id="contents" rows="3" name = 'contents'></textarea>
          </div>
          <div class = "row justify-content-end">
            <div class = col>
                <button type = 'submit' class = "btn btn-primary">글쓰기</button>
            </div>
          </div>
        </form>
    </body>
</html>

그리고 view을 작성해 주었다.

def bored_write(request):
    if request.method == 'GET':
        return render(request,'bored_write.html')
    else:
        user_id = request.session.get('user')
        if user_id == None:
            return HttpResponse('로그인 후 이용가능합니다.')
        else:
            writer = user.objects.get(pk=user_id)
            title = request.POST.get('title',None)
            contents = request.POST.get('contents',None)
            res_data = {}
            if not(title and contents):
                res_data['error'] = '모든 값을 입력해야됩니다.'
                return render(request,'bored_write.html',res_data)
            else:
                write = Bored(
                    title = title,
                    contents = contents,
                    writer = writer
                )
                write.save()
                return redirect('/bored/list')

회원가입의 코드와 크게 다르지 않아서 새롭게 추가한 내용만 설명해보겠다.

user_id = request.session.get('user')

일단 세션에서 로그인 여부를 가져와서 만약 값이 None이면 로그인후 이용가능하다는 문구가 나오도록 해주었다.

writer = user.objects.get(pk=user_id)

그리고 user의 데이터베이트에서 user_id의 데이터베이스을 가져와서 글쓴이를 알 수 있었다.

다음으로 저장을 해주고 다시 bored 페이지로 넘어 갈 수 있도록 redirect를 해주었다.

글이 잘 작성되는것을 볼 수 있다. 다음 글에는 이 커뮤니티에 다양한 기능을 추가해보겠다.

728x90