TIL : Today I Learn 220413
์ค๋์ django ๊ฒ์ํ์ ๋๊ธ์ ์์ฑํ๊ณ ์ญ์ ํ๋ ๊ฒ์ ๋ํด ํ์ตํ์๋ค. DB์ค 1:N ๊ด๊ณ์ ๋ํด ๊ณต๋ถํ๋๋ฐ ์ค๋๋ ์ด๊น์์ด ์ค๋ฅ๋ฅผ ๋ง๋ฌ๋ค... ์ค๋์ ํ์ด์ง๋ฅผ ์ฐพ์ ์ ์๋ค๋ ์ค๋ฅ๋ฅผ ๋ง๋๊ฒ ๋์๋๋ฐ, ๊ต์๋์ ๋ฐ๋ผํ๋ฉด์ comments ๋ถ๋ถ์ comment๋ผ๊ณ ๋ฐ๊พธ๋ฉด์ ํ๋์ฉ ๊ผฌ์ฌ ๋๊ธ์ด ์์ฑ๋์ง ์์์๋ค. comment๋ผ๊ณ ๋ฐ๊พธ๋ ๊ฒ์ articles/views.py์์ ์์๋์๋๋ฐ ๋ค์ comments๋ผ๊ณ ์ฐ๋ฉด์ ๊ณ ์ณค๋๋ ํด๊ฒฐ๋์๋ค...
@require_POST
def comments_create(request, pk):
if request.user.is_authenticated:
article = get_object_or_404(Article, 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)
return redirect('accounts:login')
@require_POST
def comments_delete(request, article_pk, comment_pk):
if request.user.is_authenticated:
comment = get_object_or_404(Comment, pk=comment_pk)
if request.user == comment.user:
comment.delete()
return redirect('articles:detail', article_pk)
๊ทธ๋ฌ๋ฉด์ detail.html๊น์ง ๊ผฌ์ด๊ฒ ๋์๊ณ ๋๊ธฐ์ ๋์์ ๋ฐ์ ๋ค์ ์ค๋ฅ๋ฅผ ์์ ํ ์ ์์๋ค.
{% extends 'base.html' %}
{% block content %}
<h1>DETAIL</h1>
<h3>{{ article.pk }}๋ฒ์งธ ๊ธ</h3>
<hr>
<p>์ ๋ชฉ : {{ article.title }}</p>
<p>๋ด์ฉ : {{ article.content }}</p>
<p>์์ฑ ์๊ฐ : {{ article.created_at }}</p>
<p>์์ ์๊ฐ : {{ article.updated_at }}</p>
<hr>
{% if request.user == article.user %}
<a href="{% url 'articles:update' article.pk %}">์์ </a>
<form action="{% url 'articles:delete' article.pk %}" method="POST">
{% csrf_token %}
<input type="submit" value="์ญ์ ">
</form>
{% endif %}
<a href="{% url 'articles:index' %}">back</a>
<hr>
<h4>๋๊ธ ๋ชฉ๋ก</h4>
{% if comments %}
<p><b>{{ comments|length }}๊ฐ์ ๋๊ธ์ด ์์ต๋๋ค.</b></p>
{% endif %}
<ul>
{% for comment in comments %}
<li class='mb-3'>{{ comment.user }} : {{ comment.content }}
{% if request.user == comment.user %}
<form action="{% url 'articles:comments_delete' article.pk comment.pk %}" method='POST' class='d-inline'>
{% csrf_token %}
<input type="submit" value='DELETE' class='btn btn-danger'>
</form>
{% endif %}
</li>
{% empty %}
<p>๋๊ธ ์์</p>
{% endfor %}
</ul>
<hr>
{% if request.user.is_authenticated %}
<form action="{% url 'articles:comments_create' article.pk %}" method='POST'>
{% csrf_token %}
{{ comment_form }}
<input type="submit" value='๋๊ธ ์์ฑ' class='btn btn-primary'>
</form>
{% else %}
<a href="{% url 'accounts:login' %}">๋๊ธ์ ์์ฑํ๋ ค๋ฉด ๋ก๊ทธ์ธํ์ธ์</a>
{% endif %}
{% endblock content %}
๋ํ ๊ฒฝ๋ก์ค์ ๋ ๋ค์ ํด์ฃผ์ด์ articles/urls.py๋
from django.urls import path
from . import views
app_name = 'articles'
urlpatterns = [
path('', views.index, name='index'),
path('create/', views.create, name='create'),
path('<int:pk>/', views.detail, name='detail'),
path('<int:pk>/delete/', views.delete, name='delete'),
path('<int:pk>/update/', views.update, name='update'),
path('<int:pk>/comments/',views.comments_create,name='comments_create'),
path('<int:article_pk>/comments/<int:comment_pk>/delete/',views.comments_delete,name='comments_delete'),
]
๋ค์๊ณผ ๊ฐ์ด views.ํจ์ ๋ถ๋ถ๊ณผ name=๋ถ๋ถ์ ์์ ํ์๋ค.
+)tmi
์ค๋ ๋ฐฐ์ด ๋ถ๋ถ์ด ์ข ์ด๋ ค์์ ์ ์ฒด์ ์ผ๋ก ๋ด์ฉ์ ์ ๋ฆฌํ๊ณ , DB์ ๋ํ ๊ฐ๋ ๋ ๋ค์ ํ ๋ฒ ๋ ๋ด์ผ๊ฒ ๋ค. ๋ค์์ฃผ์ ์ ์ฒ๊ธฐ๋ ๋ด์ผํ๊ณ ์๋ฐ ์คํฐ๋๋ ๋ค์ด๊ฐ์ ํ ์ผ์ด ์ ๋ง ๋ง์ง๋ง ์ด์ ๋ ์ง์ง ์ ์ ์ค์ฌ์๋ผ๋ ๊ณต๋ถํด์ผํ๋ ์์ ์ด ์จ๊ฑฐ๊ฐ๋ค. ์ด์ ๋ชจ์ํ ์คํธ๋ฅผ ๋ณด๊ณ ์์ฒญ๋ ์ ๋ง๊ฐ์ ๋๊ผ๋ค. ๊ทธ๋ ์ง๋ง ์ข์ ์ฌ๋๋ค์ ์์ ๋๋ถ์ ๊ธ๋ฐฉ ๊ทน๋ณตํ๋ค! ์๊ณ ๋ฆฌ์ฆ๋ ์ด๋ ต๋ค๊ณ ํฌ๊ธฐํ์ง๋ง๊ณ ๊พธ์คํ๊ฒ ๊ณต๋ถํด์ ์ทจ์ ์ ๊ผญ ์ฑ๊ณตํด์ผ๊ฒ ๋ค... ํ์ค์ ์์ฃผํ์ง ๋ง๊ณ ์์ผ๋ก ๋์๊ฐ๋๋ก ๋ ธ๋ ฅํด์ผ์ง!!
'๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง 2022.04.15.๊ธ (0) | 2022.04.15 |
---|---|
๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง 2022.04.14.๋ชฉ (0) | 2022.04.14 |
๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง 2022.04.12.ํ (0) | 2022.04.12 |
๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง 2022.04.11.์ (0) | 2022.04.11 |
๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง 2022.04.08.๊ธ (0) | 2022.04.08 |
๋๊ธ