ํ์ฌ ๋ก๊ทธ์ธํ๋ฉด ์ฌ์ฉ์ ์ด๋ฆ๋ง ๋จ๋ ์ํฉ์ด๋ค!
ํ ํ๋ฉด์ ๋ง๋ค์ด์ฃผ๊ณ ๋ก๊ทธ์ธ ํ๋ฉด ํ ํ๋ฉด์ผ๋ก ๊ฐ ์ ์๋๋ก ํด์ฃผ์!
๋ก๊ทธ์ธ ํ ์ด๋ํ ํ์ด์ง ๋ง๋ค๊ธฐ!
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 ํจํด์ ์๋์ ๊ฐ๋ค๊ณ ๋์์๋๋ฐ
์ฐ๋ฆฌ๊ฐ ์ ์ํ ์ ์๋ ํ์ด์ง๋
- admin/
- test/ [name='first_test']
- first/ [name='first_view']
- sign-up/ [name='sign-up']
- 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์์๋ ์ฌ์ฉํ ์ ์๋ค๊ณ ํ๋ค
์ง์ง ์์ ์ข๋ค ์ฌ๋ฌ๊ฐ ํ์ด์ง ์๋ง๋ค์ด๋ ๋๊ฒ ๋ค!
{{ }}์ด๊ฒ๋ ์ฌ์ฉํ๋๊น ์ ๊ธฐํ๋ค!
์์ ํ๋๊น ๋ฐ๋ก ๋ฐ๋๋๊ฑธ ํ์ธํ ์ ์์๋ค!
'๐๐ช > Django' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
3์ฃผ์ฐจ_5๋ฒ์งธ_๊ฒ์๊ธ ์ฐ๊ธฐ (0) | 2022.09.23 |
---|---|
3์ฃผ์ฐจ_4๋ฒ์งธ_๋ก๊ทธ์ธ ํ์ ๊ธฐ๋ฅ, ๋ก๊ทธ์์ ๋ง๋ค๊ธฐ (1) | 2022.09.23 |
3์ฃผ์ฐจ_2๋ฒ์งธ_ํ์๊ฐ์ , ๋ก๊ทธ์ธ ์์ ํ๊ธฐ (0) | 2022.09.23 |
3์ฃผ์ฐจ_1๋ฒ์งธ_์ฌ์ฉ์ ๋ชจ๋ธ ๋น๊ต, ๋ชจ๋ธ ์ ๊ทธ๋ ์ด๋, ์ ์ฉ (0) | 2022.09.23 |
2์ฃผ์ฐจ_5๋ฒ์งธ_๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (1) | 2022.09.23 |
๋๊ธ