1) 글쓰기 기능 만들기
<form> 에 어떤 url로, 어떤 방식으로 보낼 것인가를 적어 작동할 수 있도록 한다.
action="url" method="post/get 적기"
쓰기기능은 db에 내용을 저장해주어야하므로 post를 사용한다.
<form>에서 post할 부분은 <textarea> (여기 사이를 잘 보시오) </textarea>
<textarea>에서 넘겨주는 정보(my-content)를 살펴보고 urls와 일치하는 views.py의 해당 함수를 찾아간다.
request.method를 POST로 설정하고
user = request.user #어떤 사용자가 데이터를 작성했는지,
my_tweet = TweetModel #글쓰기 내장기능을 변수로 지정해 사용한다
my_tweet.author = user
my_tweet.content = request.POST.get('my-content', '') #여기에 text-area에 있는 것 쏙!
my_tweet.save()
post요청을 하면 어떤 페이지를 보여줄지도 함께 작성해준다.
return redirect('경로')
=> 그동안 사용해온 기능들로 보았을때 아마 글이 포스팅되어 보이는 페이지가 좋겠지?
이제 get요청으로 post한 것을 /home 에 불러와보자
def get요청 부분에 적어준다.
all_tweet = TweetModel.objects.all().order_by('-created_at')
# .. = TweetModel에 저장된 객체를 모두(불러온다).출력( - 만든 것)
이때 created_at은 db를 만든 순서!
불러올 때 저장된 순서(예전 것부터)대로 가져오는데, 최신순으로 불러올 수 있도록 -를 붙여준다.
GET해온 정보를 어디에 넣어줄지 작성한다.
return render(request, 'tweet/home.html',{'tweet':all_tweet})
#tweet/home.html에, { : } 딕셔너리 값으로 넘겨줌
home.html에 작성할때 key값인 tweet을 넣어준다!
{% for tw in tweet %}
{{ tw.author.username }}-{{ tw.created_at|timesince}}
author안의 모든 정보를 가져오니까 username을 지정해서 가져오도록 해준다.
tw.created_at 는 -월 -일 -시 -분이 나오는데, 뒤에 timesince를 적으면 몇 분 전으로 작성이 된다!
7) 글 삭제 기능
views.py에 함수 선언, 데코레이터 @login_required를 통해 로그인한 사람만 글을 삭제할 수 있도록 권한을 준다.
from django.contrib.auth.decorators import login_required
@login_required
def delete_tweet(request, id):
my_tweet = TweetModel.objects.get(id=id)
my_tweet.delete()
return redirect('/tweet')
그리고 urls에 추가
path('tweet/delete/<int:id>', views.delete_tweet, name='delete-tweet'),
#tweet마다의 id 고유값을 받아서 > delete_tweet함수로 넘김
html에 추가하여 글을 아무나 지우지 않도록 설정해준다.
- 글 삭제할 수 있는 사람의 조건
- 글 쓴 사람에게만 삭제 버튼 보여주기
- 고유 아이디 불러다놓기
{% if tw.author == user %}
{% endif %}
'AI 웹개발반 > Python, Django' 카테고리의 다른 글
[DRF] like 기능, M2Mfield와 모델을 생성하여 작성하기! ***수정중 (0) | 2023.05.15 |
---|---|
[Web] 웹의 동작과 이해, HTTP (0) | 2023.04.19 |
[Django] 07 home 화면 수정하기 (0) | 2023.04.06 |
[Django] 06 회원가입, 로그인기능 수정하기 (0) | 2023.04.06 |
[Django] 05 user model에 기능 추가하기 (0) | 2023.04.05 |