📢 공지사항
home
🐰

4주차

Profileapp

decorators.py 생성
from django.http import HttpResponseForbidden from profileapp.models import Profile def profile_ownership_required(func): def decorated(request, *args, **kwargs): profile = Profile.objects.get(pk=kwargs['pk']) #urls.py에서 update/로 받은 pk에서 profile의 주인을 받아와서 확인 if not profile.user == request.user: return HttpResponseForbidden() #request한 user와 다르면 접근 금지 return func(request, *args, **kwargs) return decorated
Python
복사

get_success_url 함수 그리고 리팩토링

profile의 edit가 누구에게나 보이지 않게 만듬

MagicGrid 소개 및 Articleapp 시작

MagicGrid란
임의의 높이를 가진 카드형 레이아웃

Articleapp 구현

Articleapp의 CRUD 기능을 전부 구현

models.py에 class 생성
from django.contrib.auth.models import User from django.db import models # Create your models here. class Article(models.Model): writer = models.ForeignKey(User, on_delete=models.SET_NULL, related_name='article', null=True) #지우면 게시글이 사라지지 않고 주인없는 게시글이 됨 title = models.CharField(max_length=200, null=True) image = models.ImageField(upload_to='article/', null=False) content = models.TextField(null=True) created_at = models.DateTimeField(auto_created=True, null=True)
Python
복사
forms.py에
from django.forms import ModelForm from articleapp.models import Article class ArticleCreationForm(ModelForm): class Meta: model = Article fields = ['title', 'image', 'content']
Python
복사

ListView, Pagination 소개 및 적용

NoReverseMatch 에러

게시글을 업데이트 하려고 했더니 detail 페이지로 안 넘어가는 에러 발생
서치해보니 대부분 urls.py에서 문제가 일어나길래 urls.py 들어가서 pk 어찌고 빠진 곳 있나 확인..
urlpatterns = [ path('list/', ArticleListView.as_view(), name='list'), path('create/', ArticleCreateView.as_view(), name='create'), path('detail/<int:pk>', ArticleDetailView.as_view(), name='detail'),
Python
복사
detail의 path에서 <int:pk>가 빠져있어서 냉큼 수정했더니 문제 해결
근데 이제 detail 페이지에서 update 버튼 누르면 똑같은 에러 발생
이번엔 urls.py도 정상 쟤가 말하는대로 update.html을 확인하니
<div style="text-align: center; max-width: 500px; margin: 4rem auto"> <div class="mb-4"> <h4>Article Update</h4> </div> <form action="{% url 'articleapp:update' pk=target_article.pk %}" method="post">
HTML
복사
form 태그의 pk=target_user.pk로 되어있었음..그래서 article.pk로 수정해주니 문제 해결

Mixin 소개 및 Commentapp 구현

Comment가 별도의 페이지로 존재하는게 아니라 Article 밑에 있도록 레이아웃을 바꿔줘야함
class ArticleDetailView(DetailView, FormMixin): model = Article form_class = CommentCreationForm context_object_name = 'target_article' template_name = 'articleapp/detail.html'
Python
복사
ArticleDetailView에서 FormMixin을 상속받아 form_class를 CommentCreationForm으로 추가
아직 comment를 입력해도 comment가 안 보임! → detail.html에서 시각화
<div style="border: 1px solid; text-align: left; padding: 4%; margin: 1rem 0; border-radius: 1rem; border-color: #bbb;"> <div> <strong> {{ comment.writer.profile.nickname }} </strong> &nbsp&nbsp&nbsp {{ comment.created_at }} </div> <div style="margin: 1rem 0;"> {{ comment.content }} </div> {% if comment.writer == user %} <div style="text-align: right"> <a href="{% url 'commentapp:delete' pk=comment.pk %}" class="btn btn-danger rounded-pill"> Delete </a> </div> {% endif %} </div>
HTML
복사

모바일 디버깅, 반응형 레이아웃

ProjectApp 구현

ProjectApp

1.
create/ Detail/ List View
2.
Success_url to related Project
3.
Login_required to CreateView
4.
Model
a.
title
b.
description
c.
image
d.
created_at