<aside> 💡 SNS의 대표적인 기능인 '게시글 쓰기' 를 사용 해 보면서 데이터베이스를 다뤄볼게요!
</aside>
게시글 작성은 HTTP 요청 방식 중, POST를 사용해서 이루어지게 됩니다.
POST 메서드를 사용해서 우리가 만든 글을 데이터베이스에 저장 해 보도록 할게요!
게시글에 포함되는 정보는 사용자정보, 작성한 글, 작성 시간 등의 정보가 필요합니다!
우리는 2주차에 ORM을 가지고 makemigrations 명령어를 사용해서 테이블을 이미 만들었어요! 우리가 글들을 저장할 테이블은 'tweet' 테이블 입니다.
게시글 작성하기는 http://127.0.0.1:8000/tweet 의 주소로 POST 요청을 하려고 해요!
같은 url이라도 요청 방식 (POST, GET) 에 따라서 다른 방식으로 접근이 된다는 점 잘 기억 하면서 기능을 구현 해 보도록 하겠습니다!
-
- 글 작성 할 html 만들기
- form태그가 있고, 그 안쪽에 textarea의 name과 id가 my-content로 되어있습니다.
- form 태그에 action과 method를 사용해서 django의 url로 연결시켜 주려고 해요!
- method = 'post'
- action = '/tweet/'
- ... 생략 **<form action="/tweet/" method="post">** **{% csrf_token %}** <div class="form-group mb-2"> <textarea class="form-control" style="resize: none" name='my-content' id="my-content"></textarea> </div> <button type="submit" class="btn btn-primary" style="float:right;">작성하기</button> </form> **... 생략**
- <!-- templates/tweet/home.html --> ... 생략 <!-- 글을 작성 하는 곳 --> <div class="row mb-2"> <div class="col-md-12"> <div class="card"> <div class="card-body"> <div class="media"> <div class="media-body"> **<h5 class="mt-0">나의 이야기를 적어주세요</h5>** **<p>** **<form> <div class="form-group mb-2"> <textarea class="form-control" style="resize: none" name='my-content' id="my-content"></textarea> </div> <button type="submit" class="btn btn-primary" style="float:right;">작성하기</button> </form>** </p> </div> </div> </div> </div> </div> </div> <hr> ... 생략
- 사실 제가 이전에 코드를 이미 제공 했어요~! templates 폴더 안의 tweet폴더에 작성되어있는 home.html을 열어주세요!
-
- 글을 저장 할 view 만들기
글을 쓰고 데이터베이스에 저장 해야 하기 때문에 글과 관련된 모델을 추가 해 주고 아래와 같이 작성 해 주도록 할게요~!# tweet/views.py def tweet(request): if request.method == 'GET': # 요청하는 방식이 GET 방식인지 확인하기 user = request.user.is_authenticated # 사용자가 로그인이 되어 있는지 확인하기 if user: # 로그인 한 사용자라면 return render(request, 'tweet/home.html') else: # 로그인이 되어 있지 않다면 return redirect('/sign-in')
여기서 자세히 볼 코드는 두 줄 정도 될 것 같아요.**from .models import TweetModel # 글쓰기 모델 -> 가장 윗부분에 적어주세요!** def tweet(request): if request.method == 'GET': # 요청하는 방식이 GET 방식인지 확인하기 user = request.user.is_authenticated # 사용자가 로그인이 되어 있는지 확인하기 if user: # 로그인 한 사용자라면 return render(request, 'tweet/home.html') else: # 로그인이 되어 있지 않다면 return redirect('/sign-in') **elif request.method == 'POST': # 요청 방식이 POST 일때 user = request.user # 현재 로그인 한 사용자를 불러오기 my_tweet = TweetModel() # 글쓰기 모델 가져오기 my_tweet.author = user # 모델에 사용자 저장 my_tweet.content = request.POST.get('my-content', '') # 모델에 글 저장 my_tweet.save() return redirect('/tweet')**
- user = request.user
→ 장고에서는 요청에 자동적으로 인증을 추가해요! 현재 요청이 누구에게서 요청 된 것인지 확인 할 수 있습니다. - my_tweet.content = request.POST.get('my-content','') → html에서 id와 name이 'my-content'였어요! 위처럼 작성하면 POST 형식으로 요청 한 데이터를 id와 name을 가지고 올 수 있습니다.
- 데이터베이스 모델을 추가 해 주는 부분은 views.py의 가장 윗부분에 적어주고, 아래의 굵은 글씨로 쓴 부분을 tweet 함수에 추가 해 주세요.
- 아래의 코드는 수정 하기 전의 tweet 함수인데요, request 방식이 'POST' 인 부분이 만들어지지 않았네요.
- from django.urls import path from . import views urlpatterns = [ path('', views.home, name='home'), path('tweet/', views.tweet, name='tweet') ]
- 글 관련 기능들은 tweet 앱에 작성을 해 보려고 합니다!
'Django' 카테고리의 다른 글
[Django] 댓글 쓰기/삭제/불러오기 기능 만들기 ##### (0) | 2023.05.25 |
---|---|
[Django] 장고 게시글 읽기/삭제 기능 만들기 ##### (0) | 2023.05.25 |
[Django] 장고 로그인 필요 기능과 로그아웃 만들기 ##### (0) | 2023.05.25 |
[Django] 로그인 후 장고 템플릿, 네비게이션 바 수정 ##### (0) | 2023.05.25 |
[Django] 로그인 후 페이지 이동하기 ##### (1) | 2023.05.25 |