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

3์ฃผ์ฐจ_3๋ฒˆ์งธ_๋กœ๊ทธ์ธ ์ดํ›„ ๊ธฐ๋Šฅ ๋‹ค๋“ฌ๊ธฐ

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

ํ˜„์žฌ ๋กœ๊ทธ์ธํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ด๋ฆ„๋งŒ ๋œจ๋Š” ์ƒํ™ฉ์ด๋‹ค!

ํ™ˆ ํ™”๋ฉด์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ๋กœ๊ทธ์ธ ํ•˜๋ฉด ํ™ˆ ํ™”๋ฉด์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์ž! 

 


๋กœ๊ทธ์ธ ํ›„ ์ด๋™ํ•  ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ!

 

1. ํด๋” ๋งŒ๋“ค๊ธฐ!

์•„๋ž˜์ฒ˜๋Ÿผ templates ํด๋” ์•ˆ์— tweet ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  home.html ๋งŒ๋“ค๊ณ  ์ฝ”๋“œ ๋ถ™์—ฌ๋„ฃ์ž

 

home.html

๋”๋ณด๊ธฐ

<!-- templates/tweet/home.html -->
{% extends 'base.html' %}

{% block content %}
    <div class="container timeline-container">
        <div class="row">
            <!-- ์™ผ์ชฝ ์ปฌ๋Ÿผ -->
            <div class="col-md-3">
                <div class="card">
                    <div class="card-body">
                        <h5 class="card-title">Card title</h5>
                        <h6 class="card-subtitle mb-2 text-muted">Card subtitle</h6>
                        <p class="card-text">Some quick example text to build on the card title and make up the bulk of
                            the card's content.</p>

                    </div>
                </div>
            </div>
            <!-- ์˜ค๋ฅธ ์ชฝ ์ปฌ๋Ÿผ-->
            <div class="col-md-7">
                <!-- ๊ธ€์„ ์ž‘์„ฑ ํ•˜๋Š” ๊ณณ -->
                <div class="row mb-2">
                    <div class="col-md-12">
                        <div class="card">
                            <div class="card-body">
                                <div class="media">
                                    <div class="media-body">
                                        <h5 class="mt-0">๋‚˜์˜ ์ด์•ผ๊ธฐ๋ฅผ ์ ์–ด์ฃผ์„ธ์š”</h5>
                                        <p>
                                        <form>
                                            <div class="form-group mb-2">
                                                <textarea class="form-control" style="resize: none" name='my-content' id="my-content"></textarea>
                                            </div>
                                            <button type="submit" class="btn btn-primary" style="float:right;">์ž‘์„ฑํ•˜๊ธฐ</button>
                                        </form>
                                        </p>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <hr>
                <!-- ์ž‘์„ฑ ๋œ ๊ธ€์ด ๋‚˜์˜ค๋Š” ๊ณณ -->
                <div class="row">
                    <div class="col-md-12">
                        <div class="card">
                            <div class="card-body">
                                <div class="media">
                                    <div class="media-body">
                                        <h5 class="mt-0">Media heading</h5>
                                        <p>Will you do the same for me? It's time to face the music I'm no longer your
                                            muse.
                                            Heard it's
                                            beautiful, be the judge and my girls gonna take a vote. I can feel a phoenix
                                            inside
                                            of me.
                                            Heaven is
                                            jealous of our love, angels are crying from up above. Yeah, you take me to
                                            utopia.</p>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>

            </div>
            <div class="col-md-2"></div>
        </div>
    </div>
{% endblock %}

 

 

2. home.html ์ด๋™ ํŽ˜์ด์ง€ ์—ฐ๊ฒฐํ•˜๊ธฐ

 

home.html์„ url๊ณผ view๋ฅผ ์—ฐ๊ฒฐํ•ด์•ผํ•œ๋‹ค.

home.html์€ ๊ธ€ ๊ด€๋ จ๋œ ๊ธ€์“ฐ๊ธฐ ์ฃผ์š” ๋‚ด์šฉ์ด ๋“ค์–ด๊ฐˆ ํŽ˜์ด์ง€๊ธฐ ๋•Œ๋ฌธ์— tweet ์•ฑ์—์„œ ์ง„ํ–‰ํ•˜์ž!

 

- view ์—ฐ๊ฒฐํ•˜๊ธฐ

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

# tweet/views.py
from django.shortcuts import render, redirect


# Create your views here.
# home์€ ๋กœ๊ทธ์ธ์ด ๋œ ์‚ฌ๋žŒ๋งŒ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ๋‹ค 
def home(request):
    user = request.user.is_authenticated  # ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ์„ ๋ฐ›์•˜๋Š”์ง€ (๋กœ๊ทธ์ธ์ด ๋˜์–ด์žˆ๋Š”์ง€)
    if user:
        return redirect('/tweet') #user๊ฐ€ ์žˆ๋‹ค๋ฉด /tweet์œผ๋กœ
    else:
        return redirect('/sign-in') # user๊ฐ€ ์—†๋‹ค๋ฉด ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ!

# tweet ์•ˆ์— home.html์„ ๋ณด์—ฌ์ฃผ๋Š” ํ•จ์ˆ˜
def tweet(request):
    if request.method == 'GET':
        return render(request, 'tweet/home.html')

 

 

- url ์—ฐ๊ฒฐํ•˜๊ธฐ

 

tweet ์•ฑ์— urls.py ์ƒ์„ฑํ•ด์ฃผ๊ณ 

์•„๋ž˜ ์ฝ”๋“œ ์ž…๋ ฅํ•ด์ฃผ์ž

# tweet/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'), # 127.0.0.1:8000 ๊ณผ views.py ํด๋”์˜ home ํ•จ์ˆ˜ ์—ฐ๊ฒฐ
    path('tweet/', views.tweet, name='tweet') # 127.0.0.1:8000/tweet ๊ณผ views.py ํด๋”์˜ tweet ํ•จ์ˆ˜ ์—ฐ๊ฒฐ
]

 

 


404 ์˜ค๋ฅ˜ ์žก๊ธฐ

 

์—ฌํƒœ๊นŒ์ง€ ํ•œ ์ฝ”๋“œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ 

http://127.0.0.1:8000/๋ฅผ ์—ด๋ฉด

 

์š” ์˜ค๋ฅ˜๊ฐ€ ๋œฌ๋‹ค.

์ด๊ฑด ์žฅ๊ณ ๊ฐ€ ๋ชจ๋ฅด๋Š” ์ •๋ณด๊ฐ€ ๋‚˜์™”๋‹ค๊ณ  ์•Œ๋ ค๋‹ฌ๋ผ๊ณ  ์–˜๊ธฐํ•ด์ฃผ๋Š”๊ฑฐ๋‹ค!

๋ญ˜ ํ•ด์ค˜์•ผํ•˜๋Š”์ง€ ์•„์ฃผ ์นœ์ ˆํ•˜๊ฒŒ๋„ ์•Œ๋ ค์ค€๋‹ค^^

 

์žฅ๊ณ ์˜ url ํŒจํ„ด์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค๊ณ  ๋‚˜์™€์žˆ๋Š”๋ฐ

์šฐ๋ฆฌ๊ฐ€ ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๋Š”

  1. admin/
  2. test/ [name='first_test']
  3. first/ [name='first_view']
  4. sign-up/ [name='sign-up']
  5. sign-in/ [name='sign-in']

์ด๋ ‡๋‹ค๋Š” ๊ฒƒ! ์šฐ๋ฆฌ๊ฐ€ ํ–ˆ๋˜ tweet/ ์•„์˜ˆ ์—†๋‹ค ์ด๊ฑธ ์žก์•„๋ณด์ž!

 

 

1. tweet๊ณผ url ์ด์–ด์ฃผ๊ธฐ

 

mySpartaSns ํด๋”์˜ urls.py๋ฅผ ์—ด์–ด์„œ tweet์„ ์ถ”๊ฐ€ํ•ด์ฃผ์ž!

 path('', include('tweet.urls'))

 

์š”๋ ‡๊ฒŒ!

from django.contrib import admin
from django.urls import path, include
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', views.base_response,name='first_test'),
    path('first/', views.first_view,name='first_view'),
    path('', include('user.urls')), # ์ด ์ฝ”๋“œ ๋•์— user ์•ฑ์— ์žˆ๋Š” url๋“ค์ด ํ™œ๋™ํ•˜๋Š” ๊ฒƒ
    path('', include('tweet.urls'))
]

 

 

2. tweet ์•ฑ์˜ urls.py ์ž˜ ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ

# tweet/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'), # 127.0.0.1:8000 ๊ณผ views.py ํด๋”์˜ home ํ•จ์ˆ˜ ์—ฐ๊ฒฐ
    path('tweet/', views.tweet, name='tweet') # 127.0.0.1:8000/tweet ๊ณผ views.py ํด๋”์˜ tweet ํ•จ์ˆ˜ ์—ฐ๊ฒฐ
]

 

์ž˜ ๋˜์–ด์žˆ๋‹ค!

 

 

๋‹ค์‹œ ์˜ค๋ฅ˜ํŽ˜์ด์ง€์—์„œ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๋ฉด

 

์š” ํ™”๋ฉด์ด ์ž˜ ๋œฌ๋‹ค!!

 

์ด๊ฑด tweet ์•ฑ์˜ views.py์— 

def home(request):
    user = request.user.is_authenticated  # ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ์„ ๋ฐ›์•˜๋Š”์ง€ (๋กœ๊ทธ์ธ์ด ๋˜์–ด์žˆ๋Š”์ง€)
    if user:
        return redirect('/tweet') #user๊ฐ€ ์žˆ๋‹ค๋ฉด /tweet์œผ๋กœ
    else:
        return redirect('/sign-in') # user๊ฐ€ ์—†๋‹ค๋ฉด ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ!
        
# tweet ์•ˆ์— home.html์„ ๋ณด์—ฌ์ฃผ๋Š” ํ•จ์ˆ˜
def tweet(request):
    if request.method == 'GET':
        return render(request, 'tweet/home.html')

 

์š” ์ฝ”๋“œ ๋•๋ถ„์—

๋กœ๊ทธ์ธ ์ค‘์ด๋ฉด redirect('/tweet')์œผ๋กœ ๊ฐ€๋ผ๋Š” ์ฝ”๋“œ ๋•๋ถ„์— tweet์„ ๊ฑฐ์ณ์„œ

์•„๋ž˜ tweet ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์–ด์„œ ๋ณด์—ฌ์ง€๊ฒŒ ๋œ๊ฒƒ์ด๋‹ค!

์•ผ!ํ˜ธ!

 

๊ทผ๋ฐ ์•„์ง ๋กœ๊ทธ์ธ ํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ด๋ฆ„์ด ๋œจ๋Š” ํ™”๋ฉด์ด ๋œฌ๋‹ค!

 

์ด๊ฑด user ์•ฑ์— views.py์— ์•„์ง  ์ด๋ ‡๊ฒŒ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ..

 

return HttpResponse(me.username)

 

 

์–˜๋ฅผ ์–ผ๋ฅธ ๋ฐ”๊ฟ”์ฃผ์ž!

 

return redirect('/')

 

์ด๋ ‡๊ฒŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด redirect๋กœ ๊ธฐ๋ณธํŽ˜์ด์ง€๋กœ ๊ฐ„๋‹ค!

๊ธฐ๋ณธ url์€ tweet ์•ฑ์— urls.py์— ์žˆ๋‹ค!

 

์ € home์€ tweet ์•ฑ์— views.py์— ์žˆ๋‹ค!

 

์ž˜ ํ™•์ธํ•ด์ฃผ๊ณ  ์ด์ œ ๋กœ๊ทธ์ธ ํ™”๋ฉด์—์„œ ๋กœ๊ทธ์ธํ•˜๋ฉด ํ™ˆ ํ™”๋ฉด์ด ์ž˜ ๋‚˜์˜จ๋‹ค!

 


๋กœ๊ทธ์ธ ํ›„ ํ™”๋ฉด ์ˆ˜์ •ํ•˜๊ธฐ

 

๋กœ๊ทธ์ธ์„ ํ–ˆ์„ ๋•Œ ํ™ˆ ํ™”๋ฉด์— ๋นจ๊ฐ„๋ถ€๋ถ„์„ ๊ณ ์ณ๋ณด์ž

1. ๋กœ๊ทธ์ธ ํ–ˆ์„ ๋•Œ ์ขŒ์ธก์— ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ bio๊ฐ€ ์ ํžˆ๊ฒŒ ํ•˜๊ณ ,

2. ๋กœ๊ทธ์ธ์„ ํ–ˆ์„ ๋•Œ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”์— sign in, sign up ์—†์• ๊ณ  ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ๋„์›Œ์ฃผ์ž

 

๋จผ์ € 1๋ฒˆ ๋ถ€ํ„ฐ ํ•ด๋ณด์ž

 

1. ๋กœ๊ทธ์ธ ํ›„ ์ขŒ์ธก์— username๊ณผ bio ๋ณด์—ฌ์ฃผ๊ธฐ

- templates -> tweet -> home.html ์—ด๊ธฐ

- ์™ผ์ชฝ ์ปฌ๋Ÿผ ์ˆ˜์ •ํ•ด์ฃผ๊ธฐ

<!-- ์™ผ์ชฝ ์ปฌ๋Ÿผ -->
            <div class="col-md-3">
                <div class="card">
                    <div class="card-body">
                        <h5 class="card-title">{{ user.username }}</h5>
                        <p class="card-text">{{ user.bio }}</p>

                    </div>
                </div>
            </div>

์ค‘๊ด„ํ˜ธ {{}} ๋‘๋ฒˆ ํ•˜๋Š”๊ฒŒ ์‹ ๊ธฐํ–ˆ๋‹ค

 

ํ–ˆ๋”๋‹ˆ ๊ณ ๋ƒฅ ๋ฐ”๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค!

 

 

2. ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”์— ์‚ฌ์šฉ์ž ์ด๋ฆ„ ๋„์›Œ์ฃผ๊ธฐ

- templates -> base.html ์—ด๊ธฐ

- ์ฝ”๋“œ ์ˆ˜์ •

        <form class="form-inline my-2 my-lg-0">
            {% if not user.is_authenticated %}
            <ul class="navbar-nav mr-auto">
                <li class="nav-item active">
                    <a class="nav-link" href="/sign-in"> Sign In <span class="sr-only"></span></a>
                </li>
                <li class="nav-item active">
                    <a class="nav-link" href="/sign-up"> Sign Up <span class="sr-only"></span></a>
                </li>
            </ul>
            {% else %}
                {{ user.username }} ๋‹˜ ๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค!
            {% endif %}
        </form>

 

{% %}๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด if, for ๋ฌธ์„ html์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค

์ง„์งœ ์™„์ „ ์ข‹๋‹ค ์—ฌ๋Ÿฌ๊ฐœ ํŽ˜์ด์ง€ ์•ˆ๋งŒ๋“ค์–ด๋„ ๋˜๊ฒ ๋‹ค!

{{ }}์ด๊ฒƒ๋„ ์‚ฌ์šฉํ•˜๋‹ˆ๊นŒ ์‹ ๊ธฐํ–ˆ๋‹ค!

์ˆ˜์ •ํ•˜๋‹ˆ๊นŒ ๋ฐ”๋กœ ๋ฐ”๋€Œ๋Š”๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค!

 

 

 

 

 

728x90

๋Œ“๊ธ€