ACHO.pk devlog

[멋쟁이사자처럼10기] Django 개발자 대나무숲 프로젝트(자유게시판) 본문

멋쟁이사자처럼

[멋쟁이사자처럼10기] Django 개발자 대나무숲 프로젝트(자유게시판)

Acho 2022. 7. 11. 18:42

자유게시판

이전 게시물인 '익명게시판'과 다 똑같고, 새 글을 작성한 사용자의 이름을 공개하는지에 대한 여부만 다르다.

 

snsapp/models.py

  • '작성자'에 해당하는 열이 필요하기 때문에 django에 내장되어 있는 User 객체를 참조해야한다. ( author )
  • 참조하고 있는 User가 삭제(탈퇴)된다면, User가 작성한 게시글이나 댓글도 다 삭제된다.
from django.contrib.auth.models import User

class FreePost(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    date = models.DateTimeField(auto_now_add=True)
    author =  models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.title
  • 자유게시판의 댓글이므로 FreePost를 참조한다.
class FreeComment(models.Model):
    comment = models.TextField()
    date = models.DateTimeField(auto_now_add=True)
    post = models.ForeignKey(FreePost, null=True, blank=True, on_delete=models.CASCADE)

    def __str__(self):
        return self.comment

 

 

 

snsapp/views.py

  • 자유게시판 목록
def freehome(request):
    # posts = Post.objects.all()
    freeposts = FreePost.objects.filter().order_by('-date')
    return render(request, 'free_index.html', {'freeposts': freeposts})

free_index.html 의 일부

<tbody>
	{% for post in freeposts %}
	<tr>
		<td><a href="{% url 'freedetail' post.id %}">{{ post.title }}</a></td>
		<td>{{ post.date }}</td>
		<td>{{ post.author.username }}</td>
	</tr>
	{% endfor %}
</tbody>

 

 

  • 자유게시판 새 글 생성
  • User가 자유게시판, 새 글 생성 페이지에서 글을 작성했을 때 User가 작성한 내용과 User의 정보도 저장해야한다.
  • models.py에서 FreePost model를 확인하면 이해가 간다.
def freepostcreate(request):
    if request.method == 'POST' or request.method == 'FILES':
        form = FreePostForm(request.POST, request.FILES)
        if form.is_valid():
            unfinished = form.save(commit=False)
            unfinished.author = request.user            # user 추가!
            unfinished.save()
            return redirect('freehome')
    else:
        form = FreePostForm()
    return render(request, 'free_post_form.html', {'form':form})
  • 자유게시판 상세페이지
def freedetail(request, post_id):
    post_detail = get_object_or_404(FreePost, pk=post_id)
    comment_form = FreeCommentForm()
    return render(request, 'free_detail.html', {'post_detail':post_detail, 'comment_form': comment_form})
  • 자유게시판에 달린 댓글
def new_freecomment(request, post_id):
    filled_form = FreeCommentForm(request.POST)
    if filled_form.is_valid():
        finished_form = filled_form.save(commit=False)
        finished_form.post = get_object_or_404(FreePost, pk=post_id)
        finished_form.save()
    return redirect('freedetail', post_id)

 

자유게시판-사용자 이름

 

Comments