[Django] 커뮤니티

[Django] 커뮤니티

회원들과 소통을 할 수 있도록 커뮤니티 게시판을 만들었다.

커뮤니티는

작성페이지, 목록페이지, 상세페이지 세 부분이 된다.

먼저, 커뮤니티 클래스를 만들어, 작성자, 날짜, 내용을 입력할 수 있도록 할 것므로

아래와 같이 django안에 models를 만들어주었다.

community models.py

class Community(models.Model) : title = models.CharField(verbose_name='TITLE',max_length=200) # 제목을 가져온다 date = models.DateTimeField('DATE PUBLISHED', default=timezone.now) # 날짜를 가져온다 body = models.TextField('CONTENT', default='') # 본문 내용을 가져온다 mod_date = models.DateTimeField('MODIFY DATE', auto_now=True) # 객체 이름을 제목으로 바꿔줌 def __str__(self) : return self.title # url 패턴을 만들어준다 def get_absolute_url(self) : return reverse('community:community_detail', args=(self.id,)) def get_previous(self) : return self.get_previous_by_mod_date() def get_next(self) : return self.get_next_by_mod_date()

작성페이지 html

{% csrf_token %} 닉네임 * 글 제목 내용 등록하기

글쓰기 views.py

def write(request) : if request.method == 'POST': author = request.POST['user'] title = request.POST['title'] body = request.POST['body'] post = Community.objects.create( # Post 객체의 author 필드에 'author' 변수 할당 author=author, title=title, body=body, ) # save 메서드 호출 post.save() return HttpResponseRedirect(reverse('community')) elif request.method == 'GET': return render(request, 'community_write.html')

글 작성 역시 post메소드일때 실행되도록 한다.

글 작성에 필요한 필드는 작성자, 제목, 본문 이므로 글 작성이 성공이 될 때 post 객체에 작성자, 제목, 본문을 할당한다.

save메소드는 post객체에 저장한 데이터를 데이터베이스에 저장할 수 있도록 해주는 것이다.

글 작성이 성공이되면 커뮤니티 목록 페이지에 해당 글을 보이게 한다.

상세페이지 html

{{details.id}}. {{details.title}} 작성 날짜 : {{details.date}} / 작성자 : {{details.author}} {{details.body}} {% csrf_token %} Delete

상세페이지 views.py

# 포스팅 세부 def detail(request, pk) : details = get_object_or_404(Community, pk=pk) return render(request, 'community_detail.html', {'details' : details})

글 상세 페이지는

번호에 맞는 제목과 내용이 나와야 되는데 번호가 기본키로 저장이 되어있으므로

글 번호를 가져와서 세부 내용을 확인할 수 있도록 한다.

글목록 html

# 글 목록 # 제목 작성자 작성일 {% for myapp in communitys.all %} {{ myapp.id }} {{myapp.title}} {{myapp.author}} {{ myapp.mod_date | date:"Y-m-d h:i" }} {% endfor %} 글쓰기

글목록 views.py

# 커뮤니티 def community(request): communitys = Community.objects # query set return render(request, 'community.html', {'communitys' : communitys})

글 목록 페이지는 글 번호와 글 내용이 맞아야하므로

제목을 눌렀을 시 글 번호에 맞는 세부 내용을 보일 수 있도록 id를 작성하여준다.

포스팅 지우기

# 포스팅 지우기 def post_delete(request, pk): if request.method == 'POST': post = Community.objects.get(pk=pk) post.delete() return render(request, 'post_delete.html') elif request.method == 'GET': return HttpResponse('잘못된 접근 입니다.')

글 작성자와 로그인 한 사용자가 일치하면 delete를 할 수 있다.

일치하지않으면 삭제가 되지 않는다. ( 페이지에러가 나오지만, 구현을 하지 않아 이상한 .. 프로젝트를 할땐 몰랐는데..)

from http://seongyeoni.tistory.com/64 by ccl(A) rewrite - 2021-10-03 13:26:46