from django.conf import settings
class Article(models.Model):
# user = models.ForeignKey(User, on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=10)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)settings.AUTH_USER_MODELget_user_model()


class ArticleForm(forms.ModelForm):
class Meta:
model = Article
fields = ('title', 'content', )request.user) 정보를 저장@login_required
def create(request):
if request.method == 'POST':
form = ArticleForm(request.POST)
if form.is_valid():
article = form.save(commit=False)
article.user = request.user
article.save()
return redirect('articles:detail', article.pk)
else:
...{% for article in articles %}
<p>작성자: {{ article.user }}</p>
<p>글 번호: {{ article.pk }}</p>
<a href="{% url 'articles:detail' article.pk %}">
<p>글 제목: {{ article.title }}</p>
</a>
<p>글 내용: {{ article.content }}</p>
<hr>
{% endfor %}<h1>DETAIL</h1>
<h3>{{ article.pk }} 번째 글</h3>
<hr>
<p>작성자: {{ article.user }}</p>
<p>제목: {{ article.title }}</p>
<p>내용: {{ article.content }}</p>
<p>작성 시각: {{ article.created_at }}</p>
<p>수정 시각: {{ article.updated_at }}</p>@login_required
def update(request, pk):
article = Article.objects.get(pk=pk)
if request.pk == article.user:
if request.method == 'POST':
form = ArticleForm(request.POST, instance=article)
if form.is_valid():
form.save()
return redirect('articles:detail', article.pk)
else:
form = ArticleForm(instance=article)
else:
return redirect('articles:index')
context = {
'article': article,
'form': form,
}
return render(request, 'articles/update.html', context) {% if request.user == article.user %}
<a href="{% url "articles:update" article.pk %}">UPDATE</a>
<form action="{% url "articles:delete" article.pk %}" method="POST">
{% csrf_token %}
<input type="submit" value="DELETE">
</form>
{% endif %}삭제를 요청하려는 사람과 게시글을 작성한 사람을 비교하여 본인의 게시글만 삭제할 수 있도록 하기
@login_required
def delete(request, pk):
article = Article.objects.get(pk=pk)
if request.user == article.user:
article.delete()
return redirect('articles:index')views.py에서 또 사용자를 구분하여 처리하는 이유
class Comment(models.Model):
article = models.ForeignKey(Article, on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
content = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)def comments_create(request, pk):
article = Article.objects.get(pk=pk)
comment_form = CommentForm(request.POST)
if comment_form.is_valid():
comment = comment_form.save(commit=False)
comment.article = article
comment.user = request.user
comment.save()
return redirect('articles:detail', article.pk)
context = {
...<h4>댓글 목록</h4>
<ul>
{% for comment in comments %}
<li>
{{ comment.user }} - {{ comment.content }}
...
</li>
{% endfor %}
</ul> {% for comment in comments %}
<li>
{{ comment.user }} - {{ comment.content }}
{% if request.user == comment.user %}
<form action="{% url 'articles:comments_delete' article.pk comment.pk %}" method="POST">
{% csrf_token %}
<input type="submit" value="DELETE">
</form>
{% endif %}
</li>
{% endfor %}def comments_delete(request, article_pk, comment_pk):
comment = Comment.objects.get(pk=comment_pk)
if request.user == comment.user:
comment.delete()
return redirect('articles:detail', article_pk)require_http_methods(["METHOD1", "METHOD2", ...])require_safe()require_POST()require_http_methods(request_method_list)from django.views.decorators.http import require_http_methods
@require_http_methods(['GET', 'POST'])
def func(request):
passrequire_safe()from django.views.decorators.http import require_safe
@require_safe
def func(request):
passrequire_POST()from django.views.decorators.http import require_POST
@require_POST
def func(request):
pass



@login_required
def comments_create(request, pk):
pass
@login_required
def comments_delete(request, article_pk, comment_pk):
pass
복습 잘하고 갑니다