๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“๐Ÿ’ช/Django

3์ฃผ์ฐจ_6๋ฒˆ์งธ_๊ฒŒ์‹œ๊ธ€ ์ฝ๊ธฐ/์‚ญ์ œ

by ์ˆ˜์จ”์•™ 2022. 9. 23.

๊ฒŒ์‹œ๊ธ€ ์ฝ์–ด์˜ค๊ธฐ

 

tweet์„ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ๊ฒŒ์‹œ๊ธ€์„ ๊ฐ™์ด ๋ถˆ๋Ÿฌ์˜ฌ๊ฑฐ๋‹ค!

tweet ์•ฑ์— views.py ์—ด์–ด์„œ ํ•จ์ˆ˜ ์ˆ˜์ •ํ•˜์ž

def tweet(request):
    if request.method == 'GET':  # ์š”์ฒญํ•˜๋Š” ๋ฐฉ์‹์ด GET ๋ฐฉ์‹์ธ์ง€ ํ™•์ธํ•˜๊ธฐ
        user = request.user.is_authenticated  # ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์ด ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ
        if user:  # ๋กœ๊ทธ์ธ ํ•œ ์‚ฌ์šฉ์ž๋ผ๋ฉด
            all_tweet = TweetModel.objects.all().order_by('-created_at')
            return render(request, 'tweet/home.html', {'tweet':all_tweet})
        else:  # ๋กœ๊ทธ์ธ์ด ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด
            return redirect('/sign-in')

 

get ์š”์ฒญ์œผ๋กœ ๋ฐ›์•„์˜ฌ๊ฑด๋ฐ

์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์ด ๋˜์–ด์žˆ์œผ๋ฉด ๊ธ€์„ ๋ชจ๋‘ ๋ถˆ๋Ÿฌ์˜ฌ๊ฑฐ๋‹ค

all_tweet ์ด๋ผ๋Š” ๋ณ€์ˆ˜์— TweetModel์— ์ €์žฅํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ๊ฑด๋ฐ ์ตœ์‹ ์ˆœ์œผ๋กœ ๋ถˆ๋Ÿฌ์ค˜๋ผ!

 

{'tweet':all_tweet}

 

ํ‚ค๊ฐ’์ด tweet์ธ ๋”•์…”๋„ˆ๋ฆฌํ˜•ํƒœ๋กœ ๋„˜๊ฒจ์ค€๋‹ค.

 

์ฝ์–ด์˜จ ๊ฒŒ์‹œ๊ธ€ ํ™”๋ฉด์— ๋…ธ์ถœ์‹œํ‚ค๊ธฐ

home.html์— ๋“ค์–ด๊ฐ€์„œ ์ž‘์„ฑ๋œ ๊ธ€์ด ๋‚˜์˜ค๋Š” ๊ณณ์„ ์ˆ˜์ •ํ•ด์ฃผ์ž

<hr> ํƒœ๊ทธ ์ฐพ์œผ๋ฉด ๋น ๋ฅด๋‹ค!

 

์•„๋ž˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ˆ˜์ •ํ•ด์ฃผ์ž!

<!-- templates/tweet/home.html -->
<hr>
<!-- ์ž‘์„ฑ ๋œ ๊ธ€์ด ๋‚˜์˜ค๋Š” ๊ณณ -->
<div class="row">
    {% for tw in tweet %}
        <div class="col-md-12 mb-2">
            <div class="card">
                <div class="card-body">
                    <div class="media">
                        <div class="media-body">
                            <h5 class="mt-0">{{ tw.content }}</h5>
                        </div>
                        <div style="text-align: right">
                            <span style="font-size: small">{{ tw.author.username }}-{{ tw.created_at|timesince }} ์ „</span>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    {% endfor %}
</div>

{% for tw in tweet %} : ์•„๊นŒ ๋งŒ๋“  ๋”•์…”๋„ˆ๋ฆฌ์˜ key ๊ฐ’์ธ tweet์„ ๊ฐ€์ง€๊ณ  ํ™”๋ฉด์—์„œ ์ถœ๋ ฅ์„ ํ•˜๊ธฐ ์œ„ํ•จ

{{ tw.content }} : ์ž‘์„ฑํ–ˆ๋˜ ์ •๋ณด

{{ tw.author.username }}-{{ tw.created_at|timesince }} ์ „ : tweet/models.py์— ๋ณด๋ฉด author ๋ถ€๋ถ„์— UseModel์ด ์žˆ๋Š”๋ฐ ์ด ๋ชจ๋ธ์—์„œ ๊ฐ–๊ณ ์žˆ๋Š” ์ „๋ถ€๋ฅผ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ด๋‹ค! tw.author๋ผ๊ณ ๋งŒ ํ•˜๋ฉด ๊ทธ ์ „๋ถ€๋ฅผ ๋‹ค ๊ฐ€์ ธ์˜ค๋Š”๊ฑฐ๋ผ์„œ .username์„ ํ•ด์คŒ์œผ๋กœ์จ ์ด๋ฆ„๋งŒ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ!

 

์ด๋ ‡๊ฒŒ ์ˆ˜์ •ํ•ด์ฃผ๊ณ  ์ƒˆ๋กœ๊ณ ์นจ ํ•ด์ฃผ๋‹ˆ๊นŒ

 

๊ทธ๋™์•ˆ ์ž…๋ ฅํ–ˆ๋˜๊ฒŒ ์•„์ฃผ ์ž˜ ๋‚˜์˜จ๋‹ค!

 

 

๊ธ€ ์‚ญ์ œํ•˜๊ธฐ

๊ฒŒ์‹œ๊ธ€์€ ๊ฐ๊ฐ์˜ ๊ณ ์œ ํ•œ ๊ฒŒ์‹œ๊ธ€ id๊ฐ€ ์žˆ๋‹ค!

 

๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ view ๋งŒ๋“ค๊ธฐ

tweet์•ฑ์˜ views.py์— ์•„๋ž˜ ์ฝ”๋“œ๋กœ ์ˆ˜์ •ํ•˜์ž

 

# tweet/views.py
from django.contrib.auth.decorators import login_required


@login_required #๋กœ๊ทธ์ธ ํ•œ ์‚ฌ์šฉ์ž๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์คŒ! import ํ•„์š”
def delete_tweet(request, id):
    my_tweet = TweetModel.objects.get(id=id)
    my_tweet.delete()
    return redirect('/tweet')

 

 

urls ์—ฐ๊ฒฐํ•˜๊ธฐ

tweet๋žฉ์˜ urls.py ์ฝ”๋“œ ์ˆ˜์ •ํ•˜๊ธฐ

 

# tweet/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
    path('tweet/', views.tweet, name='tweet'),
    path('tweet/delete/<int:id>', views.delete_tweet, name='delete-tweet'),
]

 

๋งจ ์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€ํ•ด์ฃผ์ž

 

 

home.html์— ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œํ•˜๋Š” url ๋„ฃ์–ด์ฃผ๊ธฐ

<!-- ์ž‘์„ฑ ๋œ ๊ธ€์ด ๋‚˜์˜ค๋Š” ๊ณณ -->
            <div class="row">
                {% for tw in tweet %}
                <div class="col-md-12 mb-2">
                    <div class="card">
                        <div class="card-body">
                            {% if tw.author == user %}
                            <div style="text-align: right">
                                <a href="/tweet/delete/{{ tw.id }}">
                                    <span class="badge rounded-pill bg-danger">์‚ญ์ œ</span>
                                </a>
                            </div>
                            {% endif %}
                            <div style="text-align: right">
                                <a href="#">
                                    <span class="badge rounded-pill bg-success">๋ณด๊ธฐ</span>
                                </a>
                            </div>
                            <div class="media">
                                <div class="media-body">
                                    <h5 class="mt-0">{{ tw.content }}</h5>
                                </div>
                                <div style="text-align: right">
                                    <span style="font-size: small">{{ tw.author.username }}-{{ tw.created_at|timesince
                                        }} ์ „</span>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                {% endfor %}
            </div>
        </div>
        <div class="col-md-2"></div>
    </div>
</div>
{% endblock %}

 

์งœ๋ž€!!!! ์ด์ œ ๋œ๋‹ค!!~~~!!~~~!~!

 

 

 

728x90

๋Œ“๊ธ€